2011-11-19 65 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