为还没有写书的作者选择名字

时间:2019-09-29 22:18:56

标签: sql

我们必须选择尚未写书的作者,但是有3个不同的表格,这使我对如何编写连接表达式感到困惑。

我们有表格:

authors: author_id
authorships: author_id, book_id
books: book_id. 

很明显,我从作者那里选择了名字,并尝试了内部联接,但它对我不起作用。帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

这是使用LEFT JOIN反模式的好地方:

SELECT a.*
FROM authors a
LEFT JOIN authorships s ON s.author_id = a.author_id
WHERE s.author_id IS NULL

比率:LEFT JOIN为空时,表示作者在authorships表中没有相应的记录。 WHERE子句仅过滤出不匹配的authors记录(即没有书籍的作者)。之所以称为 antipattern ,是因为JOIN的目的通常是匹配记录,而这里我们使用它来检测不匹配的记录。

答案 1 :(得分:0)

由于这听起来像是学校的作业,所以我不会给出完整的答案。

尝试在作者和作者身份之间使用外部联接。确保从作者那里检索到我想要的书。

尝试找出尚未发表的作者的样子。您可以使用此子句通过适当的where子句为查询中的查询制定公式。

答案 2 :(得分:0)

这真的很容易,只要检查两个表中哪一列似乎具有相同的值(如果两个表中至少有一些共同点),然后将内联接放在这两个表上,将外联接放在不常见的数据表上。

请记住,当您在不同的表之间进行联接时,别名总是很重要的,还应该适当地提及ON和WHERE。