MySQL基于多行选择值
我有一个像这样的MySQL表MySQL基于多行选择值,mysql,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的所有唯一值,它们对应于foo列中的23和31 i、 e.对于这个表,我将得到以下结果 bar 17 4 44 17、4和44都被选中,因为
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
的所有唯一值,它们对应于foo
列中的23
和31
i、 e.对于这个表,我将得到以下结果
bar
17
4
44
17
、4
和44
都被选中,因为对于所有这些值,存在两行,分别对应于foo
列中的23
和31
即使bar
中的21
和71
值对应于foo
中的23
和31
,它们也不会被选中,因为与其他数字对应的另一行上不存在相同的bar
值
我该怎么办
SELECT
bar
FROM
tbl
WHERE
foo IN (23,31)
GROUP BY
bar
HAVING
COUNT(*) = 2
SELECT bar
FROM mytable
WHERE foo IN (23,31)
GROUP BY bar
HAVING count(bar) >= 2
COUNT(*)
中的2
表示您正在检查的foo
的值的数量-在本例中为两个。例如,如果需要与所有(23,31,7)相对应的bar
s,请将其更改为COUNT(*)=3
,因为需要满足三个值
COUNT(*)
中的2
表示您正在检查的foo
的值的数量-在本例中为两个。例如,如果需要与所有(23,31,7)相对应的bar
s,请将其更改为COUNT(*)=3
,因为有三个值需要满足。请尝试以下操作:
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)
试试这个:
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)
这个怎么样
SELECT
bar
FROM
tbl
WHERE
foo IN (23,31)
GROUP BY
bar
HAVING
COUNT(*) = 2
SELECT bar
FROM mytable
WHERE foo IN (23,31)
GROUP BY bar
HAVING count(bar) >= 2
这个怎么样
SELECT
bar
FROM
tbl
WHERE
foo IN (23,31)
GROUP BY
bar
HAVING
COUNT(*) = 2
SELECT bar
FROM mytable
WHERE foo IN (23,31)
GROUP BY bar
HAVING count(bar) >= 2
foo
和bar
的组合是否唯一?(即23->17
在表中不会出现两次)foo
和bar
的组合是否唯一?(即,23->17
不会在表中出现两次)仅供参考,因为如果组合是唯一的,
条最多有两个值。@ZaneBien:我使用了
以防计数大于或等于2。仅供参考,
是不必要的,因为如果组合是唯一的,条
最多有两个值。@ZaneBien:我使用了
以防计数大于或等于2。