2

首先这些是我的表:

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

我正在尝试执行以下操作:我想选择其所有 Bars 的 num 均高于 10 的 Foos。下面的查询可以正常工作并且可以做到,但我不想在选择中包含 Foo.id . 当我从选择中删除 Foo.id 时,我收到一个错误,即在 where 子句(子查询的)中找不到该列。

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

如何从选择中删除 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 
    )

先感谢您!

4

1 回答 1

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)
于 2013-03-02T11:37:56.637 回答