+-
mysql – 左连接过滤空值,其中包含自定义函数
我有一个表引用城市表的表,其中一个键叫做cityId.
我使用此查询从中获取数据:

SELECT t.ID, city.areaId FROM transp t
LEFT JOIN city ON city.ID = t.cityId;

像这样,它按原样返回表,对于city.areaId为NULL,如果cityId为null.

但是当我将函数添加到使用city.areaId的where子句时,即使是始终为true的函数,查询也不会显示cityId为null的行.例如:

SELECT t.ID, city.areaId FROM transp t
LEFT JOIN city ON city.ID = t.cityId
WHERE always_true(city.areaId);

不会显示null cityId的任何行.我不明白为什么会发生这种情况,因为我正在使用左连接,如果我将该函数放入SELECT中,我可以看到它确实是真的.

SQLFiddle

最佳答案
好吧,虽然看起来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 – 左连接过滤空值,其中包含自定义函数 - 乐贴网