我正在努力尽可能有效地解决这个问题。
假设我有一个表ids,其中有一列包含整数列表,我们称之为“ids”:
ids
0
1
2
3
4
5
6
我还有另一个表items,其中有几列整数:
item1 item2 item3 item4
5 2 2 4
9 2 1 19
0 25 9 2
我想要做的是从 table2 中选择所有列,但如果值不在“ids”表中,我想要一个 NULL。所以我的结果看起来像这样:
item1 item2 item3 item4
5 2 2 4
NULL 2 1 NULL
0 NULL NULL 2
我可以通过从项目中选择并加入每个列的id来做到这一点:
SELECT CASE WHEN ids1.id IS NOT NULL THEN items.item1 ELSE NULL,
CASE WHEN ids2.id IS NOT NULL THEN items.item2 ELSE NULL,
CASE WHEN ids3.id IS NOT NULL THEN items.item3 ELSE NULL,
CASE WHEN ids4.id IS NOT NULL THEN items.item4 ELSE NULL,
FROM items
LEFT OUTER JOIN ids ids1 ON (ids1.id = items.item1),
LEFT OUTER JOIN ids ids2 ON (ids2.id = items.item2),
LEFT OUTER JOIN ids ids3 ON (ids3.id = items.item3),
LEFT OUTER JOIN ids ids4 ON (ids4.id = items.item4)
不幸的是,当这些表变得很大(数百万行)时,必须加入同一个表 4 次是相当麻烦的。有没有更快或更有效的方法来做到这一点?
谢谢!