>我有这样的表格:
+----+---------+---------+
| Id | column1 | column2 |
+----+---------+---------+
| 1 | a | b |
| 2 | a | b |
+----+---------+---------+
像这样的查询SELECT * FROM table WHERE id IN (1,2,3)
什么查询才能获得这样的结果(我需要为不存在的 id 获取空值):
+----+---------+---------+
| Id | column1 | column2 |
+----+---------+---------+
| 1 | a | b |
| 2 | a | b |
| 3 | null | null |
+----+---------+---------+
编辑
感谢您到目前为止的回复。
有没有更"动态的方法"来做到这一点,上面的查询只是一个示例。实际上,我需要检查大约 1000 个 id!
你可以使用这样的东西:
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
的值,否则将获得 null。
这不是SQL的工作方式。 我认为您的应用程序确定它要求的 id 和返回的 id 之间的差异是相当微不足道的。
因此,与其通过黑客或一些奇怪的查询来模拟您的结果,为什么不让您的应用程序处理它呢?
我仍然无法理解您可能通过 id 查询数据库上的行的用例可能是什么,这些行可能存在,也可能不存在。