我有一张这样的表:
+----+---------+---------+
| Id | column1 | column2 |
+----+---------+---------+
| 1 | a | b |
| 2 | a | b |
+----+---------+---------+
以及类似SELECT * FROM table WHERE id IN (1,2,3)
我需要什么查询才能获得这样的结果(我需要获取nonxisten id的空值):
+----+---------+---------+
| Id | column1 | column2 |
+----+---------+---------+
| 1 | a | b |
| 2 | a | b |
| 3 | null | null |
+----+---------+---------+
感谢到目前为止的回复。
有没有更“动态的方式”来做到这一点,上面的查询只是一个例子。 实际上我需要检查大约1000个id!
答案 0 :(得分:1)
您可以使用以下内容:
SELECT ids.ID, your_table.column1, your_table.column2
FROM
(SELECT 1 as ID
UNION ALL SELECT 2
UNION ALL SELECT 3) ids left join your_table
on ids.ID = your_table.ID
第一个子查询返回不同行中所需的每个值。然后,您可以尝试使用your_table
加入每一行。如果您使用left join
,则会显示第一个子查询中的所有值,如果与your_table
匹配,则会显示your_table
的值,否则您将获得空值。
答案 1 :(得分:0)
不幸的是,这不是SQL的工作方式。我认为你的应用程序确定它要求的id和返回的id之间的差异是非常微不足道的。
因此,为什么不让你的应用程序处理它,而不是黑客或一些奇怪的查询来模拟你的结果?
我仍然无法理解用户可能会在哪些用例中查询可能存在或可能不存在的id的数据库中的行。