2016-03-01 72 views
1

想象一下这样的数据库表:如果它不返回结果,是否可以在SQL中获取查询值?

|id |value| 
|1a |a | 
|2b |b | 
|3c |c | 

而下面的SQL:

select * from bar b where b.id in (1,2,3,4) 

是否有可能得到类似如下:

|id |value | 
|1a |a  | 
|2b |b  | 
|3c |c  | 
|4d |<null> | 

基本上,我想知道哪个查询param没有返回值。

+0

,如果你有'ID列表你想查询,那么是的,但不是用这种语法。 – shamsup

+0

@ShamSUP是的,确保SQL是愚蠢的和错误的。我想知道什么是正确的SQL来完成这一点。 – iCodeLikeImDrunk

+0

好吧,这将取决于你从哪里得到 – shamsup

回答

2

您必须创建一个所有期望值的内嵌值。然后LEFT JOIN你的表是:

select t1.id, t2.* 
from (
    SELECT 1 AS id UNION ALL SELECT 2 UNION ALL 
    SELECT 3 UNION ALL SELECT 4 
) AS t1 
LEFT JOIN bar AS t2 ON t1.id = t2.id 
+0

检查出 – iCodeLikeImDrunk

+0

嗯如果我有1k ids,这是如何工作的? – iCodeLikeImDrunk

+0

@姚晨你必须在这种情况下建立一个查找表 –

0

如果您能够将您的ID添加到自己的数据库表,你可以使用类似这样

SELECT t1.id, t2.value 
FROM (SELECT id FROM guids) as t1 
    LEFT JOIN table2 ON t1.id = t2.id