当您独自工作并且迷失在自己的头脑中时,偶尔会遇到这些恼人的问题!我完全希望答案很简单:
我有这样的查询:
SELECT * FROM table_a
LEFT JOIN table_b ON table_a.order_id = table_b.order_id
WHERE (table_a.column_a='string' OR table_b.column_b='string' OR table_b.column_c='string')
group by column_d
查询正在返回所有行,并且似乎忽略了查询的 WHERE 部分……但事实并非如此。如果我删除 OR 部分,它会按预期工作:
SELECT * FROM table_a
LEFT JOIN table_b ON table_a.order_id = table_b.order_id
WHERE (table_a.column_a='string')
group by column_d
想法/明显的问题?
更新
我的具体问题是我正在根据整数列评估字符串,这意味着该语句评估为未知。代码现在如上,但如果字符串是数字,我只添加特定的 OR
最佳答案
通过观察您的加入,我猜想您正在比较的某些列可以为空,并且相位返回结果为 true 的行(请注意,在相位为空值的位置进行比较的列导致 UNKNOWN 。没有,没有被返回。您可以通过添加一个条件来解决这个问题,该条件将检查值是否不为 Null)
SELECT * FROM table_a
LEFT JOIN table_b ON table_a.order_id = table_b.order_id
WHERE ((table_a.column_a IS NOT NULL AND table_a.column_a='string') OR (table_b.column_b IS NOT NULL AND table_b.column_b='string') OR (table_b.column_c IS NOT NULL AND table_b.column_c='string'))
GROUP BY column_d
关于MySQL 连接查询 - 或者被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10847673/