我有一项任务,经过几个小时的思考和同时对抗我的疾病,我放弃了一项我认为不可能完成的任务:
我只打印出至少由两位作曲家创作的CD的名字。所有这些信息都存储在3个表中: cd(有cdnr(键)和名字),aufnahme(有轨道(键:cdnr和snr(件ID)))和stueck(有作曲家id(knr)和键snr)
我能想到的唯一的问题是,计算一个子查询的元组,它明确地为每个cdnr排序cdnr和knr,但似乎我无法从初始查询中传递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是主键,knr一个外键)。所以STUECK和AUFNAHME必须合并,然后对不同的knr进行计数,并且在那里我迷路了。
我知道它的功课,但我仍然希望有人可以帮助我..
答案 0 :(得分:1)
SELECT cd.name
FROM cd
WHERE cd.CDNR IN
(
SELECT CDNR
FROM AUFNAHME
GROUP BY CDNR
HAVING COUNT(SNR) = 2
)