0

私はそのようなMySQLテーブルを持っています;

foo      bar
1        21
23       17
31       17
23       21
19       9
23       4
31       4
3        27
51       6
31       44
23       44
31       71

私が望むのは、列内のとの両方barに対応するすべての一意の値を選択することです。 2331foo

つまり、このテーブルの場合、次の結果が得られます。

bar
17
4
44

174、および44すべてが選択されます。これらの値のすべてについて、列の と の両方に対応する 2 つの行が存在するためです2331foo

21および71inはおよびinにbar対応しますが、同じ値のが他の番号に対応する別の行に存在しないため、それらは選択されません。2331foobar

これについてどうすればいいですか?

4

3 に答える 3

2
SELECT 
    bar
FROM 
    tbl
WHERE
    foo IN (23,31)
GROUP BY
    bar
HAVING
    COUNT(*) = 2

2inは、チェックしている値のCOUNT(*)量を表しfooます — この場合は 2 です。たとえば、(23,31,7) のすべてに対応する sが必要な場合は、満たす値が 3 つあるためbar、 に変更します。COUNT(*) = 3

于 2012-06-17T19:17:22.283 に答える
1

これを試して ::

Select tab1.bar
from
(select bar from table where foo=/*?(say 23)*/) tab1
inner join 
(Select bar from table where foo=/*?(say 31)*/) tab2
on (tab1.bar=tab2.bar)
于 2012-06-17T19:18:22.587 に答える
1

これはどう?

SELECT bar
FROM mytable
WHERE foo IN (23,31)
GROUP BY bar
HAVING count(bar) >= 2

デモ

于 2012-06-17T19:20:16.877 に答える