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

17, 4, 和all 都被选中,因为对于所有这些值,存在44行对应于列中的和。 2331foo

即使值21and 71inbar对应于23and 31in foo,它们也不会被选中,因为与bar其他数字对应的另一行中不存在相同的值。

我该怎么办?

4

3 回答 3

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

2inCOUNT(*)表示您正在检查的值的数量——foo在本例中为两个。例如,如果您希望bars 对应于所有 (23,31,7),请将其更改为,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 回答