带有count的嵌套sql查询

时间:2011-11-19 20:15:47

标签: sql oracle

我有一项任务,经过几个小时的思考和同时对抗我的疾病,我放弃了一项我认为不可能完成的任务:

我只打印出至少由两位作曲家创作的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进行计数,并且在那里我迷路了。

我知道它的功课,但我仍然希望有人可以帮助我..

1 个答案:

答案 0 :(得分:1)

你猜这不可能吗?我无法抗拒。

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