1

次のフィールドを持つ nobel という名前のテーブルがあります: yr、subject、winner です。

この表は、長年にわたるさまざまな分野のノーベル賞受賞者を表しています。

物理賞を受賞したが、化学賞を受賞しなかった年を探しています。

私は答えが次のようになると思っていました:

SELECT yr FROM nobel 
WHERE subject ('Chemistry') IN (SELECT subject FROM nobel WHERE subject = 'Physics')

私は構文が間違っているとかなり確信しています...そして、正しい道を進んでいるとは確信していません。助けていただければ幸いです。ありがとう!

4

5 に答える 5

3

これを試して:

SELECT yr 
FROM nobel n1 
WHERE n1.subject = 'Physics'
AND yr NOT IN (SELECT yr FROM nobel WHERE subject = 'Chemistry')
于 2012-10-31T02:52:17.800 に答える
1

以下のコードは、必要な結果を提供します。

 SELECT n1.yr
    FROM nobel n1
    WHERE subject = 'physics'
        AND NOT EXISTS (
            SELECT yr
            FROM nobel n2
            WHERE subject = 'chemistry' AND n2.yr = n1.yr
            )
于 2012-10-31T07:12:47.390 に答える
1

SQL Server 2000 を使用していない限り、EXCEPTは 2005 以降で動作します。

    SELECT yr
      FROM nobel 
     WHERE subject = 'Chemistry'
EXCEPT
    SELECT yr
      FROM nobel
     WHERE subject = 'Physics'
于 2012-10-31T03:00:36.027 に答える
0

間違った道を進んでいる可能性があると思います。あなたが持っているwhere句は、本質的にどこで「化学」=「物理学」と言っていますが、これは決して真実ではありません。

あなたがする必要があると思うのは、物理学と化学が授与された年を見つけてから、物理学だけが授与された年を見つけることです.

SELECT yr
FROM Nobel
LEFT JOIN
(
  SELECT SUM(1), yr
  FROM  Nobel
  WHERE subject = 'Chemistry'
  Group By yr
) as Chemistry
ON Chemistry.yr = Nobel.Yr
LEFT JOIN
(
  SELECT SUM(1), yr
  FROM  Nobel
  WHERE subject = 'Physics'
  Group By yr
) as Physics
ON Physics.yr = Nobel.yr

WHERE Physics.YR IS NOT NULL AND Chemistry.Yr IS NULL

GROUP BY yr
于 2012-10-31T02:52:14.133 に答える
0

2 つの派生テーブルを作成して結合できます。

SELECT c.Year FROM 
c (SELECT Year, COUNT(*) FROM nobel where subject = 'chem' GROUP By Year) INNER JOIN
p (SELECT Year, COUNT(*) FROM nobel where subject = 'phy' GROUP By Year) ON c.Year = p.Year
WHERE c.Count != 0 and p.Count = 0
于 2012-10-31T02:52:40.323 に答える