我有两个具有相同主键的表,但是一个比另一个大得多。我想知道哪些ID在较小的表中有一行。 (在示例中,a
很大而b
很小)。现在,我正在使用带有CASE的OUTER JOIN来确定b值是否为NULL。它不起作用(总是得到1)。修复此问题会很好,但必须有更好的方法。我该怎么办?
SELECT a.id,
CASE b.id
WHEN NULL THEN 0
ELSE 1
END AS exists
FROM a LEFT OUTER JOIN b
ON a.id=b.id;
答案 0 :(得分:6)
这与您展示的内容具有相同的逻辑,但代码更短:
SELECT a.id,NOT ISNULL(b.id) AS exists
FROM a LEFT OUTER JOIN b
ON a.id=b.id;
答案 1 :(得分:3)
没有。检查外键列中的NULL
正是如此。
然而,没有任何内容等于NULL
(这不是一个值),这就是您CASE
转到ELSE
部分的原因。您需要使用IS NULL
来检查列是否为NULL
。
CASE WHEN b.id IS NULL THEN ...