1

私はこれらの2つのようなテーブルを持っています

test_table
date        student     test
2012-05-31  Alice       Math
2012-05-31  Alice       Math
2012-05-31  Bob         Math
2012-05-31  Bob         Spelling
2012-06-01  Alice       Math
2012-06-01  Alice       Spelling

score_table
date        student     test        best_daily_score
2012-05-31  Alice       Math        90
2012-05-31  Bob         Math        50
2012-05-31  Bob         Spelling    50
2012-06-01  Alice       Math        95

テストbest_daily_score用のアリスがまだ録音されていないことを確認したいのですが。を返すクエリを探していますSpelling2012-06-01

2012-06-01  Alice       Spelling

これはの唯一の行です

SELECT DISTINCT date, student, test FROM test_table

それはありません

SELECT DISTINCT date, student, test FROM score_table

これは機能しません:

SELECT DISTINCT date, student, test FROM test_table WHERE date, student, test NOT IN (SELECT DISTINCT date, student, test FROM score_table)

の左側NOT INが3つのリストであってはならないからだと思います。

4

1 に答える 1

5

これを試してみてください:

SELECT  a.date,
        a.student,
        a.test
  FROM  test_table a 
          LEFT JOIN score_table b
            ON (a.date = b.date) AND
               (a.student = b.student) AND
               (a.test = b.test)
WHERE   b.best_daily_score IS NULL

クエリは、からのすべてのレコードを、が存在するかどうかに一致させようとtest_tablescore_tableますLEFT JOINdate、、、studentおよびに一致しtestます。レコードがに見つからなかった場合、score_table基本的にbest_daily_scoreはになりますNULL。そのため、にのみ表示する条件を追加しましNULLbest_daily_score

デモ(SQLFiddle)については、ここをクリックしてください

于 2012-06-28T00:36:46.080 に答える