MySQL根据多行选择值

时间:2012-06-17 19:12:18

标签: mysql

我有一个像这样的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> 2331对应的foo的所有唯一值。

即。对于这个表,我会得到以下结果;

bar
17
4
44

17444全部被选中,因为对于所有这些值,存在两行对应 {{1} }和23列中的31

即使foo中的2171值与bar中的2331相对应,它们也不会被选中,因为foo的相同值不存在于与另一个数字相对应的另一行上。

我该怎么做?

3 个答案:

答案 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)

这个怎么样?

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

Demo