我一直在写一些看起来像这样的查询:
SELECT
...
FROM table_a a
LEFT JOIN table_b b
ON b.id = a.id
LEFT JOIN table_c c
ON c.id = a.id
在这些查询中,只有一个连接可以成功。换句话说,来自的行与来自的行或来自的table_a
行匹配。table_b
table_c
在选择列表中,有一些基于连接成功的逻辑。我可以通过执行以下操作来测试它:
SELECT
CASE
WHEN b IS NULL THEN
-- do something
ELSE NULL
END
FROM table_a a
LEFT JOIN table_b b
ON b.id = a.id
LEFT JOIN table_c c
ON c.id = a.id
测试某行是否可用时,NULL
您可以在表达式中使用表别名IS NULL
,但它在表达式中无法按预期工作IS NOT NULL
。table_b
如果其中有不存在的列NULL
,则表达式table_b IS NOT NULL
将返回FALSE
。
但是,表达式将按预期NOT (table_b IS NULL)
返回。TRUE
为什么会这样?