所以,我一直在尝试用 SQL 编写查询,但遇到了问题。我正在尝试写一个“属于”的条件。我想要做的是,如果要获取的值属于另一个表中的列,则填充一件事,否则填充 null。
例如。
NAME table
ID NAMES
1 A
2 B
3 C
4 D
5 E
XYZ table
ID
2
4
5
我是这样写查询的
(CASE WHEN NAME.ID IN (SELECT ID FROM XYZ) THEN NAME.NAMES ELSE NULL END ) AS 'ABC'
这个查询确实运行了,但是它已经运行了 14 个小时(对于非常大量的数据来说很明显)并且仍然没有结果。此逻辑是否存在缺陷或是否有更好的方法可以完成?
我期望这样的结果:
ABC
NULL
B
NULL
D
E
最佳答案
你只需要一个简单的左连接:
SELECT
CASE WHEN t2.ID IS NOT NULL THEN t1.NAMES END AS ABC
FROM NAME t1
LEFT JOIN XYZ t2
ON t1.ID = t2.ID;
Demo
请注意,CASE
表达式的 else 条件,如果未明确指定,则默认为 NULL
。此行为在这里有效,因为如果 NAME
表中的给定记录与 中的任何记录不匹配,您希望呈现
表。NULL
XYZ
关于SQL 'belong to'逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779558/