2017-03-07 35 views
0

我有這些表:該值屬於兩個人

Tabel Instrument 
Instrument Pitch 
drums  null 
guitar  null 
paino  null 

Tabel Occupation 
Stuknr Instrument 
1  guitar 
2  piano 
2  guitar 
3  piano 
4  drums 
4  guitar 

Tabel Music 
Stuknr ComposerID 
1  1 
2  1 
3  2 
4  2 

Tabel Composer 
ComposerID ComposerName 
1   Test1 
2   Test2 

現在我需要查詢這就是: 哪些工具是在作曲家的音樂都創立

我嘗試:

SELECT I.instrumentnaam 
FROM Instrument I 
WHERE EXISTS (SELECT 1 
      FROM Bezettingsregel B 
      WHERE B.instrumentnaam = I.instrumentnaam 
      AND EXISTS(SELECT 1 
        FROM Stuk S 
        WHERE S.stuknr = B.stuknr 
        AND EXISTS(SELECT 1 
           FROM Componist C 
           WHERE C.componistId = S.componistId AND C.naam = 'Karl Schumann' OR C.naam = 'Thom Guidi'))) 

但是這顯示了作曲家的所有樂器,我只想要兩個作曲家都使用的樂器。

感謝幫助!

+2

請張貼輸出工作也 – mohan111

+0

你是什麼意思? – Yakalent

+1

提供輸出數據,以便我們更有效地回答 – mohan111

回答

0

試試這個:

SELECT i.Instrument 
FROM Instrument AS i 
JOIN Occupation AS o ON i.Instrument = o.Instrument 
JOIN Music AS m ON o.Stuknr = m.Stuknr 
JOIN Composer AS c ON m.ComposerID = c.ComposerID 
GROUP BY i.Instrument 
HAVING COUNT(DISTINCT c.ComposerID) = (SELECT COUNT(*) 
             FROM Composer) 

Demo here

+0

Thanx,現在這個作品現在只適用於兩位作曲家,但如果作曲家變得更大,它將不再適用? – Yakalent

+0

@Yakalent該查詢返回所有* Composer表中存在的作曲家共有的樂器。作曲家的實際數量不應該對查詢結果產生任何影響。 –

0

這應該爲您的要求

select distinct Instrument from #Composer a inner join #music b 
on a.ComposerID = b.ComposerID inner join #inst c on b.Stuknr = c.Stuknr 
group by Instrument,ComposerName having count(Instrument)>1