首先是我的表格:
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
)
提前谢谢!
答案 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)