我有一个包含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匹配它。任何帮助将不胜感激。
答案 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;
请注意,如果要返回完整匹配的记录,则需要将原始查询加回主表。我也不会假设您想要哪些匹配,而是返回所有匹配对。