我在WHERE子句中用一个变量做几个连接。我不确定我是否尽可能高效地执行了所有操作,或者甚至使用了最佳实践,但我的问题是,当tableC.type=500时,一半的表有数据,而另一半不会导致整个查询失败。

SELECT tableA.value1 , tableB.value2, tableC.value3 FROM tableA
JOIN tableB ON  tableB.id=tableA.id
JOIN tableC ON  tableC.id=tableB.id
WHERE tableA.category=$var && tableC.type=500;

我希望仍然得到tableA.value1和tableB.value2,即使tableC中没有类型为500的字段。
有什么想法吗?我完全搞不懂怎么处理这个。。。

最佳答案

SELECT tableA.value1 , tableB.value2, tableC.value3 FROM tableA
JOIN tableB ON  tableB.id=tableA.id
LEFT JOIN tableC ON  tableC.id=tableB.id AND tableC.type=500
WHERE tableA.category=$var;

[内]连接(只有当存在值时才加入);
如果在tableC中找不到匹配的行,则LEFT JOIN为tableC列返回NULL。
我认为在使用左连接时,有必要将tableC条件移到ON子句中,因为WHERE会过滤掉空值(因为tableC.type是空的!)!=500)。

关于php - 当WHERE子句中缺少一个字段时,防止整个JOINed MYSQL查询失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2430983/

10-09 09:42