当你独自工作并且迷失在你自己的脑海中时偶尔会出现一个令人烦恼的问题!我完全期待答案很简单:
我有这样的查询:
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,如果字符串是数字
答案 0 :(得分:2)
通过观察你的加入,我猜你正在比较的一些列是可空的,并且相位返回的结果为真的行(注意那些在相位与空值之间进行比较的列导致UNKNOWN 。是否,没有被退回。您可以通过添加一个条件来解决这个问题,该条件将检查值是否为空)
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