2017-02-06 44 views
2

我有一個看起來像這樣SQL查詢需要創造性的解決方案

object_id type 

1   ISSN 

1   ISBN 

2   ISSN 

2   ISSN 

3   ISSN 

3   KSBN 

3   KSBN 

4   ISSN 

4   ISBN 

我需要找到所有同時具有在同一查詢ISSN和ISBN的數據。

我發現的溶液使用此代碼

select * 
from table 
where OBJECT_ID in 
(
    SELECT K.OBJECT_ID 
    FROM tableK 
    WHERE K.`TYPE` IN ('ISSN', 'ISBN') 
    GROUP BY K.OBJECT_ID 
    HAVING count(distinct K.TYPE) = 2 
) 

然而,它需要較長的時間來運行,因爲數據集很大。有沒有不使用嵌套查詢的選項。

當我把的objectID的直接運行幾乎立即

select * 
from table 
where OBJECT_ID in 
(
    1,4 
) 

它運行得更快,因爲它不執行選擇多次。但是當我嘗試將輸出保存爲變量時,它會因爲返回多行而崩潰。

是否有任何類型的連接可以在較小的數據集上完成,因爲在整個表上進行反射連接需要超過10分鐘。

+0

見http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very -simple-sql-query – Strawberry

回答

0

這是怎麼回事?

SELECT t1.*, t2.* FROM table as t1 
    INNER JOIN table as t2 
    ON t1.object_id = t2.object_id 
    AND t2.type = "ISSN" 
WHERE t1.type = "ISBN" 
+0

我需要找到所有數據,這會濃縮它顯示它找到的集合中只有一條記錄。即如果Object_id被使用兩次,它應該顯示兩次。 – yankel

+0

那裏我更新了選定的字段。無論如何,有了這個,您可以獲取所有類型爲ISBN的記錄,並且與ISSN有聯繫。這不是你想要的嗎? – yBrodsky