我在tableC中不存在以下ID的查询问题。尽管有LEFT JOIN,但如果tableC中缺少ID,则tableA和tableB中的ID不在结果中。那是因为这些ID的tableC.name不存在。我以为MySQL会忽略最后一部分,认为该子句为真……。
SELECT
tableA.id, tableA.name
FROM
tableA
LEFT JOIN tableB ON tableA.id = tableB.id
LEFT JOIN tableC ON tableA.id = tableC.id
WHERE
tableA.latin = 'whatever'
AND RIGHT(tableC.name,2) != 'y'
我想在WHERE子句的第二部分有一个使用IF,CASE或EXISTS的解决方案,但是通过以下三个尝试,我没有得到想要的结果(我只显示最后一行):
WHERE
tableA.latin = 'whatever'
AND IF(tableC.name <> 0, RIGHT(tableC.name,2) != 'y', ' ');
这也不会产生错误,但不会产生预期的结果:
WHERE
tableA.latin = 'whatever'
AND IF(tableC.name = true, RIGHT(tableC.name,2)!= 'y', ' ');
使用EXISTS尝试以下操作会给我MySQL Wordbench编辑器错误:
WHERE
tableA.latin = 'whatever'
AND if(EXISTS tableC.name, RIGHT(tableC.name,2) != 'y', ' ');
每当您tableC.name
在where子句中从左联接表引用列(对于您的情况)时,都将强制联接表现为内部联接。而是将测试移入联接条件。
SELECT tableA.id, tableA.name
FROM tableA
LEFT JOIN tableB
ON tableA.id = tableB.id
LEFT JOIN tableC
ON tableA.id = tableC.id
AND RIGHT(tableC.name,2) != 'y'
WHERE tableA.latin = 'whatever'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句