MySQL在连接后删除行

时间:2012-06-25 08:42:39

标签: mysql

我发现了一种奇怪的方式来解决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),这确实有些原因。为什么这样做有效,为什么不等于和否定运算符呢?

2 个答案:

答案 0 :(得分:5)

您需要WHERE tableB.categoryId IS NULL OR tableB.categoryId != 14

答案 1 :(得分:0)

我认为您的问题与左连接无关。

对于调试,您应该在没有左连接的情况下尝试更简单的查询。 只需SELECT * FROM tableB WHERE categoryId = 14

同时检查categoryId的类型,问题可能是从int到string的隐式转换,这些转换在所有上下文中都不起作用,因此最好明确说明它们。