如何使用group by或having子句代替内连接MYSQL

时间:2017-02-06 10:30:36

标签: mysql sql

我写了这个查询

SELECT K.ID, K.`TYPE`, K1.`TYPE`,
FROM table K
INNER JOIN table K1
ON K1.ID = K.ID
WHERE K1.`TYPE` = 'ISSN'
AND K.`TYPE` = 'ISBN'

它查找一个具有两个记录的对象ID,一个具有type = ISSN,另一个具有ISBN。

这些表非常大,此查询大约需要十分钟才能运行。是否有更快的替代方法来使用嵌套选择(在同一个表上)或通过语法

谢谢

2 个答案:

答案 0 :(得分:1)

这很可能会比COUNT(DISTINCT ...)

更能提升您的效果
SELECT K.ID
FROM table K
WHERE K.`TYPE` IN ('ISSN', 'ISBN')
GROUP BY K.ID
HAVING min(K.`TYPE`) <> max(K.`TYPE`)

答案 1 :(得分:0)

GROUP BY版本:

SELECT K.ID
FROM table K
WHERE K.`TYPE` IN ('ISSN', 'ISBN')
GROUP BY K.ID
HAVING COUNT(DISTINCT K.`TYPE`) = 2

如果ID只能包含不同的类型值,则可以改为HAVING COUNT(K. TYPE ) = 2