我有一个这样的表:
+----+---------+---------+
| 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
的值,否则你会得到空值。
关于mysql select IN 如果id不存在则返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886940/