嗨,我有下表T:
id 1 2 3 4
col a b a c
Run Code Online (Sandbox Code Playgroud)
我想做一个select,当group(col)有count(col)> 1时返回id,col
一种方法是
SELECT id,col FROM T
WHERE col IN (SELECT col FROM T GROUP BY(col) HAVING COUNT(col)>1);
Run Code Online (Sandbox Code Playgroud)
实习生选择(从右侧)返回'a',主要的一个(左)将返回1,a和3,a
问题是where语句似乎非常慢.在我的实际情况中,内部选择的结果有很多'col',约70000,而且需要几个小时.
现在,进行内部选择和主要选择获得所有ID和upcs并在本地进行交叉要快得多.MySQL应该能够有效地处理这种查询.
我可以将其中的内容替换为联接或更快的内容吗?
谢谢
你可以尝试使用INNER JOIN加快速度
colcol, id可能会让您获得更好的表现SQL语句
SELECT T.id, T.col
FROM T
INNER JOIN (
SELECT col
FROM T
GROUP BY col
HAVING COUNT(*) > 1
) tcol ON tcol.col = T.col
Run Code Online (Sandbox Code Playgroud)