我有一个像这样的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
列中选择与{em> {/ em> 23
和31
对应的foo
的所有唯一值。
即。对于这个表,我会得到以下结果;
bar
17
4
44
17
,4
和44
全部被选中,因为对于所有这些值,存在两行对应 {{1} }和23
列中的31
。
即使foo
中的21
和71
值与bar
中的23
和31
相对应,它们也不会被选中,因为foo
的相同值不存在于与另一个数字相对应的另一行上。
我该怎么做?
答案 0 :(得分:2)
SELECT
bar
FROM
tbl
WHERE
foo IN (23,31)
GROUP BY
bar
HAVING
COUNT(*) = 2
2
中的COUNT(*)
表示您正在检查的foo
值 - 在这种情况下为两个。如果您希望bar
对应于所有(23,31,7),请将其更改为COUNT(*) = 3
,因为要满足三个值。
答案 1 :(得分: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)
答案 2 :(得分:1)