我有一个引用城市表的表,其键名为 cityId
。
我使用此查询从中获取数据:
SELECT t.ID, city.areaId FROM transp t
LEFT JOIN city ON city.ID = t.cityId;
像这样,它按原样返回表,如果 city.areaId
为空,则返回 NULL。
但是当我向使用 city.areaId
的 where 子句添加函数时,即使函数始终为真,查询也不会显示包含 cityId
的行一片空白。例如:
SELECT t.ID, city.areaId FROM transp t
LEFT JOIN city ON city.ID = t.cityId
WHERE always_true(city.areaId);
不会显示任何包含空 cityId
的行。我不明白为什么会这样,因为我使用的是 left join
,如果我将函数放在 SELECT 中,我可以看到它确实总是正确的。
最佳答案
好吧,虽然看起来 MySQL 做了一些内部优化,但我认为这是错误的(在这种情况下将左连接转换为内部连接是不正确的),但有一个解决方法
SELECT t.ID, city.areaId
FROM transp t
LEFT JOIN city ON city.ID = t.cityId
WHERE always_true(coalesce(city.areaId, null));
关于mysql - 在 where 中使用自定义函数左连接过滤空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851132/