2015-05-29 107 views
-2

我有兩個表格,一個是「Batch」,另一個是「BatchDetails」。 批處理有像BatchId,BatchName和TechId這樣的列。 BatchDetails有像BatchDetailsId,BatchId和SubTechID這樣的列。如何爲這種情況編寫SQL查詢

BatchDetails表通過「BatchId」與批處理表連接。 「Batch」和「BatchDetail」表之間存在一對多關係。 一個批次在BatchDetails表中有多個條目。

現在我想從批處理選擇所有BatchName其中TechId = 1並且對應於該BatchName,BatchDetails表具有SubTechId = 1和SubTechId = 2。

+5

爲什麼這個標籤甲骨文*和* MySQL的? – tadman

+1

賈斯汀,你想要查詢每種查詢語言,或者什麼?請註明 – Fallenreaper

回答

2

有幾種方法可以返回指定的結果。

假設規範是從batchbatchdetails具有至少兩個相關聯的行返回行,並且這些相關聯的行中的至少一個是subtechid=1和至少一個與subtechid=2

對於MySQL:

SELECT b.batchname 
    FROM batch b 
    JOIN batchdetail d1 
    ON d1.batchid = b.batchid 
    AND d1.subtechid = 1 
    JOIN batchdetail d2 
    ON d2.batchid = b.batchid 
    AND d2.subtechid = 2 
    WHERE b.techid = 1 
    GROUP BY b.batchid 
    ORDER BY b.batchname 

也有可能獲得使用EXISTS謂詞同樣的結果:

SELECT b.batchname 
    FROM batch b 
    WHERE b.techid = 1 
    AND EXISTS (SELECT 1 
        FROM batchdetail d1 
        WHERE d1.batchid = b.batchid 
        AND d1.subtechid = 1 
       ) 
    AND EXISTS (SELECT 1 
        FROM batchdetail d2 
        WHERE d2.batchid = b.batchid 
        AND d2.subtechid = 2 
       ) 
    ORDER BY b.batchname 

,或者讓subtechid和比較不同值的數量爲恆定

SELECT b.batchname 
    FROM batch b 
    JOIN batchdetail d 
    ON d.batchid = b.batchid 
    AND d.subtechid IN (1,2) 
    WHERE b.techid = 1 
    GROUP BY b.batchid 
HAVING COUNT(DISTINCT d.subtechid) = 2 
    ORDER BY b.batchname 

還有一些其他的查詢模式...

+1

謝謝spencer7593。 它工作正常。 –

相關問題