我们必须选择尚未写书的作者,但是有3个不同的表格,这使我对如何编写连接表达式感到困惑。
我们有表格:
authors: author_id
authorships: author_id, book_id
books: book_id.
很明显,我从作者那里选择了名字,并尝试了内部联接,但它对我不起作用。帮助将不胜感激!
答案 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。