2013-03-02 49 views
2

首先,这些都是我的表:使用列在子查询,但不能在主查询的选择

Foo (id, Name) 
Bar (foo_id, num) 

我努力做到以下几点:我想选择FOOS它全部的酒吧有NUM更高比10.下面的查询完美的罚款,做到这一点,但我不想在选择Foo.id。当我从select中删除Foo.id时,出现一个错误,该列在where子句(子查询)中找不到。

#1054 - Unknown column 'Foo.id' in 'where clause' 

如何从select中删除Foo.id,但仍使用子查询的where子句中的列?我尝试加入子查询中的Foo表,并在其中使用Name,但由于Name不是唯一的,所以这不会给我所需的结果。

SELECT 
    Foo.Name, 
    Foo.id 
FROM 
    Foo 
    LEFT JOIN Bar ON Bar.foo_id = Foo.id 
GROUP BY Bar.foo_id 
HAVING COUNT(Bar.foo_id) = ( 
    SELECT 
     COUNT(Bar.foo_id) 
    FROM 
     Bar 
    WHERE 
     num > 10 
    AND 
     Bar.foo_id = Foo.id GROUP BY Bar.foo_id 
    ) 

预先感谢您!

回答

3

这里的另一个简单的办法,

SELECT a.Name 
FROM Foo a 
     INNER JOIN Bar b 
      ON a.ID = b.foo_ID 
GROUP BY a.ID, a.Name 
HAVING COUNT(b.foo_ID) = SUM(b.num > 10) 
+0

我已经更新了答案':)' – 2013-03-02 11:44:54

+1

非常感谢你!这解决了它,我从来没有想过比较验证条件的酒吧总数与总连接数的总和。 – Chris 2013-03-02 11:46:16

+0

不客气':D' – 2013-03-02 11:46:55