1

我有一张这样的桌子:

+----+---------+---------+
| 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!

4

2 回答 2

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。如果您使用 a left join,则显示第一个子查询中的所有值,如果与 匹配your_table,则显示来自your_table的值,否则您将获得空值。

于 2012-12-14T22:18:53.763 回答
0

不幸的是,这不是 SQL 的工作方式。我认为您的应用程序确定它要求的 id 和返回的 id 之间的差异是非常微不足道的。

因此,与其破解或一些奇怪的查询来模拟你的结果,为什么不让你的应用程序处理它呢?

我仍然无法理解用例可能是什么,您将通过可能存在或不存在的 id 查询数据库上的行。

于 2012-12-14T22:19:29.623 回答