查找包含所有值的ID(mySQL,SQL)

时间:2009-08-10 13:23:57

标签: sql mysql

想想这样的表

ID     Value    
100    1    
100    3    
101    1    
101    4    
102    2    
102    5    
103    2    
103    4    
104    1    
104    3    
105    2    
105    5

问题是,如果我给出值2和5,我应该得到102和105,其中102和105同时具有值​​2和5,或者如果我给出值1和3,我应该得到100和104。

如何只使用一个sql命令执行此操作?我需要一个尽可能轻的查询。

并使用UNION,INTERSECTION或NESTED SQL,其中一个是更快,更慢,更重的e.t.c?

提前致谢 Ergec

3 个答案:

答案 0 :(得分:6)

尝试这样的事情:

SELECT id
  FROM test
WHERE 
   value in (2,5)
GROUP by id
HAVING count(*) = 2

如果你想测试它,简单的表(没有索引!):

CREATE TABLE IF NOT EXISTS test (
  id int(4) NOT NULL,
  `value` int(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO test (id, value) VALUES
(100, 1),
(100, 3),
(101, 1),
(101, 4),
(102, 2),
(102, 5),
(103, 2),
(103, 4),
(104, 1),
(104, 3),
(105, 2),
(105, 5);

几天前我有一个非常相似的问题。见MySQL - Find rows matching all rows from joined table

答案 1 :(得分:0)

这将是我实现它的方法:

SELECT DISTINCT id
FROM table 
WHERE 
id IN (SELECT id FROM table WHERE value = 2)
AND 
id IN (SELECT id FROM table WHERE value = 5)

答案 2 :(得分:0)

有很多解决方案。除了Jhonny的解决方案,您还可以使用连接

SELECT DISTINCT t1.id
FROM table t1, table t2
WHERE t1.id = t2.id
  AND t1.value = 2
  AND t2.value = 5

或使用Intersect

SELECT id FROM table WHERE value = 2

INTERSECT

SELECT id FROM table WHERE value = 5