在子查询中使用列,但不在主查询的select中使用

时间:2013-03-02 11:23:24

标签: mysql sql subquery

首先是我的表格:

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

我正在尝试执行以下操作:我想选择其所有Bars的数量都大于10的Foos。下面的查询工作得很好并且这样做,但我不想拥有Foo.id在选择中。当我从select中删除Foo.id时,我得到一个错误,即在where子句(子查询中)找不到该列。

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

如何从select中删除Foo.id,但是仍然使用子查询的where子句中的列?我尝试在子查询中加入Foo表并在where中使用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 
    )

提前谢谢!

1 个答案:

答案 0 :(得分: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)