2011-11-19 67 views
0

我有一個任務,並琢磨,並在同一時間擊退我的病了幾個小時之後,我放棄了我的猜測,任務是不可能的:嵌套的SQL查詢與數

我是隻打印出至少由兩位作曲家組成的CD名稱。所有這些信息存儲在3個表格中: cd(具有cdnr(鍵)和名稱),aufnahme(具有曲目(鍵:cdnr和snr(片段ID)))和stueck(具有作曲家ID(knr )和鍵SNR)

唯一soulution我能想到的,指望其明顯的排序cdnr和KNR每個cdnr子查詢的元組,但似乎我無法從初始查詢通過cdnr:

select a.cdnr,a.name 
from cd a,aufnahme b,stueck c 
where a.cdnr=b.cdnr 
and b.snr=c.snr 
and (
    select count(*) from (
     select distinct aufnahme.cdnr,stueck.knr 
     from aufnahme,stueck 
     where aufnahme.snr=stueck.snr 
     and aufnahme.cdnr=a.cdnr 
    ) 
)<>1029381 
group by a.cdnr,a.name,c.knr 

如果有人可以幫助我,我會非常感謝。

模式:

KOMPONIST (KNR, NAME, VORNAME, GEBOREN, GESTORBEN) 
STUECK (SNR, KNR ! KOMPONIST, TITEL, TONART, OPUS) 
CD (CDNR, NAME, HERSTELLER, ANZ CDS, GESAMTSPIELZEIT) 
AUFNAHME (CDNR ! CD, SNR ! STUECK, ORCHESTER, LEITUNG) 
SOLIST ((CDNR, SNR)! AUFNAHME, NAME, INSTRUMENT) 

編輯: 小時後(和良好的睡眠),我仍然沒有解決這一個線索。所有的建議 - 起初似乎是一個好的開始 - 有一個我無法想象的問題:他們試圖將一個表分組。但是這樣做是行不通的,因爲表STUECK沒有分組(snr是主鍵,是外鍵)。所以STUECK和AUFNAHME必須合併,然後清楚的knr被統計,並且在那裏我迷路了。

我知道它的作業,但我還是希望有人能幫助我..

+6

因爲它的作業:暗示是使用一個作曲家,一組和一個條款。 – Andrew

+0

@alex - 您應該發佈架構。我(我想我們大多數人)不知道aufnahme或stueck意味着什麼。 –

+0

@Lieven - 你是對的,這是更可用。安德魯 - 「唯一的解決辦法」確實是雙曲線。我也嘗試了過去的幾個小時。我只是不明白我應該在什麼時候算作曲家。還有最後一個提示:這很難嗎?還是我錯過了顯而易見的? ;) – alex

回答

1

你猜這是不可能???我無法抗拒。

SELECT cd.name 
FROM cd 
WHERE cd.CDNR IN 
(
    SELECT CDNR 
    FROM AUFNAHME 
    GROUP BY CDNR 
    HAVING COUNT(SNR) = 2 
) 
+0

uhm。這不起作用我猜,因爲每個曲目(STUECK中的每一行)只有一個作曲家。 – alex

+0

你試過了嗎?這個*工作*的關鍵是查詢的GROUP BY SNR部分 - 它「組合」了行。 – Hogan

+0

好吧,我想'GROUP BY SNR'不會分組,因爲它是'STUECK'的主鍵,所以它是唯一的。我想'JOIN AUFNAHE A ON cd.CDNR = A.SNR'應該是'A.CDNR',因爲這些是相應的鍵。哦,非常感謝你的幫助! ;) – alex