我发现了一种奇怪的方式来解决mysql的问题。有人请解释为什么会发生。
我从表A中选择所有列,并从表B中选择具有特定条件的连接,每个表A行可能满足或不满足。
现在,在连接之后,在WHERE语句中,我想完全省略表B的列categoryId值为14的行(不是连接部分,而是整行)如果有表B结果(如果没有,我希望保留行) )。
所以我在WHERE tableB.categoryId != 14
。没有结果(应该是什么时候)。为了好奇,我试图将操作符重写为=,所以WHERE tableB.categoryId = 14
,结果是我想要的结果我没有得到,a和我不想要的结果。
我不明白这一点,这很奇怪
不应该不等于事情吗?
我也试过了!(tableB.categoryId = 14
),但也没有结果。最后,我尝试了WHERE IF(tableB.categoryId = 14, 0, 1)
,这确实有些原因。为什么这样做有效,为什么不等于和否定运算符呢?
答案 0 :(得分:5)
您需要WHERE tableB.categoryId IS NULL OR tableB.categoryId != 14
答案 1 :(得分:0)
我认为您的问题与左连接无关。
对于调试,您应该在没有左连接的情况下尝试更简单的查询。
只需SELECT * FROM tableB WHERE categoryId = 14
同时检查categoryId的类型,问题可能是从int到string的隐式转换,这些转换在所有上下文中都不起作用,因此最好明确说明它们。