使用子查询加入

Joins using Sub Queries

我有两个名为 "Book" 和 "Author." 的 table "Book" table 的属性是:PK- Book_Num、Book_Title、Book_Year、Book_Cost、Book_Subject。 "Author" table 的属性是 PK- Au_ID, Au_Fname, Au_Lname. 这两个 table 之间有 M:N 关系它们之间的桥梁 table 被命名为 "Writes" 并且它有一个来自两个 table 的复合主键,由 Book_Num 和 Au_ID 组成. 这是我的问题:我想编写一个查询来显示 Au_ID、Au_Fname、Au_Lname 的所有作者,这些作者从未写过主题为 [= 的书23=] 并按 Au_Lname 对结果进行排序。我将如何使用子查询执行此操作?

试一试:

SELECT A.Au_ID, A.Au_Fname, A.Au_Lname FROM Author A 
  JOIN Writes W ON A.Au_ID = W.Au_ID
  JOIN Book B ON B.Book_Num = W.Book_Num
  WHERE A.Au_ID NOT IN (
    SELECT A.Au_ID FROM Author A 
      JOIN Writes W ON A.Au_ID = W.Au_ID
      JOIN Book B ON B.Book_Num = W.Book_Num
      WHERE B.Book_Subject = 'Programming'
  )
  ORDER BY A.Au_Lname ASC;

如果你想要更好的性能,你可以使用"NOT EXISTS"来获取你想要的数据。

SELECT Au_ID, Au_Fname, Au_Lname FROM Author
WHERE NOT EXISTS 
(
    SELECT A.Au_ID FROM Author A 
    JOIN Writes W ON A.Au_ID = W.Au_ID
    JOIN Book B ON B.Book_Num = W.Book_Num
    WHERE B.Book_Subject = 'Programming'
    AND Author.Au_ID = A.Au_ID 
)
ORDER BY Au_Lname ASC