1

当您独自工作并且迷失在自己的脑海中时,偶尔会出现令人讨厌的问题之一!我完全期待答案很简单:

我有一个这样的查询:

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

4

1 回答 1

2

通过观察您的加入,我猜想您正在比较的某些列是可以为空的,并且阶段返回结果为 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
于 2012-06-01T09:38:53.513 回答