如何在 SQL 中使用 JOIN 编写子查询

How do I write a subquery using a JOIN in SQL

我有以下代码来检索和显示同时也是编辑的作者的名字和姓氏 (ED_ID = WRT_ID)。

SELECT Writers.WRT_LastName AS LastName, Writers.WRT_FirstName AS FirstName
FROM Writers INNER JOIN Editors ON Editors.ED_ID = Writers.WRT_ID;

它产生了我想要的结果,但我如何使用子查询编写它并产生相同的结果?

我使用的是 Access 2013

如果我需要提供更多信息,请告诉我。

您只需要将连接条件放入 where 子句子查询中即可:

SELECT WRT_LastName as LastName, WRT_FirstName as FirstName
FROM   WRITERS
WHERE  WRT_ID in (SELECT ED_ID FROM EDITORS)

据推测,您不想要重复的结果。我指出这一点,因为如果 Editors table 有重复,子查询将与 join 不同。

典型的写法是使用 INEXISTS。我倾向于选择后者,尽管两者通常在性能方面相当相似(另一方面,NOT EXISTS 在语义上优于 NOT IN)。

SELECT Writers.WRT_LastName AS LastName, Writers.WRT_FirstName AS FirstName
FROM Writers 
WHERE EXISTS (SELECT 1 FROM Editors WHERE Editors.ED_ID = Writers.WRT_ID);