2017-02-06 19 views
0

我寫此查詢如何通過或having子句,而不是內部使用一組加入MYSQL

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' 

它看起來具有兩個記錄,一個類型= ISSN和一個與ISBN一個對象ID。

這些表格非常大,這個查詢大約需要10分鐘才能運行。是否有使用更快的替代或者嵌套選擇(在相同的表)或基團通過具有語法

謝謝

+0

我只看到一個名爲一個表'table' – Vikrant

+0

是隻有一個表 – yankel

回答

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.類型) = 2

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`)