0

例如,如果您有一个表books,并且您想查找某个名称的所有书籍,那么获取这些书籍的作者并研究该books表以查找表中的所有条目。例如,如果您搜索标题“All About Pirates”,然后有 2 本书具有该标题,一本由“Jane Doe”撰写,另一本由“Joe Smith”撰写,则将再次在该表中搜索这些作者的所有标题。

select *
from books b
join books b2 on b.author = b2.author
where title = 'All About Pirates'
4

3 回答 3

3

使用这样的子查询:SELECT * FROM books WHERE author IN (SELECT author FROM books WHERE title='All About Pirates');

于 2012-09-23T22:52:10.557 回答
2

您的查询几乎是正确的。您需要在 where 子句中指定 title 的别名:

select b2.*
from books b join
     books b2
     on b.author = b2.author
where b.title = 'All About Pirates' 

原始查询不可解析,因为标题不明确。在此查询b2中是具有匹配作者的书籍列表。

于 2012-09-24T02:51:54.033 回答
1

您可以将表连接到选择的结果。

例如,您会得到与这本书相匹配的作者,如下所示:

SELECT author FROM books WHERE title="All About Pirates" GROUP BY author;

因此,您可以像这样将 books 表加入到这个作者表中:

SELECT books.*
FROM books
JOIN (SELECT author FROM books WHERE title="All About Pirates" GROUP BY author) AS r
ON books.author=r.author;
于 2012-09-23T22:49:39.323 回答