MySQL从2个不同的项目中选择具有相同值的匹配行

时间:2017-12-07 02:50:45

标签: mysql sql

我有一个包含3列的表(主键,Col1,Col2)。 Col1有一个索引。该表超过1亿行,所以我想使用索引查询速度。

我试图从Col1搜索在Col2中具有匹配值的2个项目,但排除任何只匹配其中一个项目的结果。

Col1  | Col2
------------
item1 | 123
item2 | 492
item3 | 123
item4 | 392
item5 | 588
item1 | 456
item2 | 492
item3 | 039
item4 | 938
item5 | 209
item1 | 456

例如,这个查询:

SELECT * FROM `table` WHERE `Col1` = 'item1' OR `Col1` = 'item3' group 
by Col2
having count(*) > 1

返回:

item1 | 123
item1 | 456

item1 | 123是正确的,因为它像我想要的那样匹配item1和item3,但我不希望它返回item1 | 456,因为它与item1和item3都不匹配。它只返回,因为有2个item1匹配它。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用count(distinct)

SELECT Col2
FROM `table`
WHERE Col1 IN ('item1', 'item3') 
GROUP BY Col2
HAVING COUNT(DISTINCT Col1) > 1;

答案 1 :(得分:0)

改为使用COUNT(DISTINCT)

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT Col2
    FROM yourTable
    GROUP BY Col2
    -- WHERE Col1 IN ('item1', 'item3')
    HAVING COUNT(DISTINCT Col1) = 2
) t2
    ON t1.Col2 = t2.Col2;

请注意,如果要返回完整匹配的记录,则需要将原始查询加回主表。我也不会假设您想要哪些匹配,而是返回所有匹配对。

Demo