MySQL查询 - 获取不同的值

时间:2009-10-13 15:14:52

标签: mysql

有一个表“T”,其中包含如下所示的数据:

A   B
---------
3    5   
4    6      
7    10 
8    5 
9    12 
3    6
3    7
8    7

假设给定的输入集{3,8}作为A的值,如何检索输入集中所有值都有条目的B的所有不同值?

B
---
5
7
编辑:我认为问题不够明确。我希望B中的值具有给定集合中所有值的记录作为列A的值。因此,由于没有A = 8且B = 6的记录,因此不会包括B = 6。希望这说清楚!

2 个答案:

答案 0 :(得分:5)

SELECT DISTINCT B 
FROM my_table WHERE A IN (3,8)

编辑:

SELECT B FROM AB WHERE A = 3
INTERSECT
SELECT B FROM AB WHERE A = 8

INTERSECT为您提供两个结果集中出现的行。

第二次编辑:

SELECT B,COUNT(B) 
FROM AB WHERE A IN (3,8) 
GROUP BY B 
HAVING COUNT(B) = 2

但是你应该在两个地方修改它:在IN参数和最后,在COUNT(B)=?中。 ?应该等于参数的数量。我希望这会有所帮助。

第三次编辑:

SELECT B,COUNT(B) 
FROM 
(
    SELECT DISTINCT A, B FROM AB
) x
WHERE A IN (3,8) 
GROUP BY B 
HAVING COUNT(B) = 2

这样可以避免重复输入问题。

答案 1 :(得分:0)

基本上,您可以创建两个子查询,其中只筛选出匹配候选的行(即A为3或8)。然后将这些行相互连接在B的值上,任何匹配的行都将是您要查找的行。我不是100%确定MySQL的语法,但我相信这会起作用:

SELECT * FROM (SELECT * FROM T WHERE A = 3) t3 INNER JOIN (SELECT * FROM T WHERE A = 8) t8 ON t3.B = t8.B