Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL基于多行选择值_Mysql - Fatal编程技术网

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都被选中,因为

我有一个像这样的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
列中的
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。