2

最初にこれらは私のテーブルです:

 Foo (id, Name)
 Bar (foo_id, 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 に答える