不同的where子句列基于group by连接表的数量

时间:2011-09-07 23:13:03

标签: mysql join count group-by

鉴于以下2个表

table_a
id    name      num_one      num_two
------------------------------------
1     Foo       5            10
2     Bar       4            -1


table_b
name      table_a_id
--------------------
Fooa      1
Foob      1

假设我想在where子句中使用ether num_one或num_two,具体取决于另一个表是否已加入行。

我能想到的最好的事情是:

SELECT a.* FROM table_a a
JOIN table_b b on b.table_a_id = a.id
WHERE if(count(b.*) > 0, a.num_one, a.num_two) > 0
group by a.id

理想情况下,它会检查5>第一行为0,-1> 2表示0,因为第2行没有表B中的连接行。

但它因无效使用group by而出错。我知道“有”但不确定如何在这种情况下使用它。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这可以使用IF语句,OR语句或子查询来完成。在大型桌子上,这些都不会非常有效。

对原始陈述的唯一真正修改是使用NULL而不是count(*)。

SELECT DISTINCT a.* 
FROM table_a a
LEFT JOIN table_b b on b.table_a_id = a.id
WHERE (b.table_a_id is null AND a.num_one > 0) 
   OR (b.table_a_id is NOT NULL AND a.num_two > 0)