0

我发现了 mysql 如何做某事的一种奇怪方式。有人请解释为什么会这样。

我从表 A 中选择所有列,并从表 B 中以特定条件左连接,每个表 A 行可能满足也可能不满足。

现在,在连接之后,在 WHERE 语句中,如果有表 B 结果(如果没有,我确实希望保留该行)。

所以在我做的地方WHERE tableB.categoryId != 14。没有结果(应该有的时候)。出于好奇,我尝试将运算符重写为 =,so WHERE tableB.categoryId = 14,结果是我想要的结果我没有得到,a 和我不想要的结果我确实得到了。

我不明白,这很奇怪。
不等于不应该起作用吗?
我也尝试了!(tableB.categoryId = 14),但这也没有产生任何结果。最后,我尝试了WHERE IF(tableB.categoryId = 14, 0, 1),并且出于某种原因确实有效。为什么这行得通,为什么不等于和否定运算符不起作用?

4

2 回答 2

5

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

于 2012-06-25T08:45:53.630 回答
0

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

对于调试,您应该尝试一个没有左连接的更简单的查询。只是SELECT * FROM tableB WHERE categoryId = 14

还要检查 categoryId 的类型,问题可能是从 int 到 string 的隐式转换并非在所有上下文中都有效,因此最好将它们明确化。

于 2012-06-25T09:00:09.903 回答