2012-09-23 48 views
0

例如,如果您有一個表books,並且您想要查找某個特定名稱的所有書籍,請獲取這些書籍的作者,並研究表格中所有條目的books表格。例如,如果您搜索了「All About Pirates」的標題,然後有兩本書名爲「Jane Doe」,另一本是「Joe Smith」,那麼這些作者將再次搜索該表。在SQL中,你如何找到匹配一個條件的行,從中獲取一個值並將它匹配到同一個表中的其他行?

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

回答

3

使用像這樣的子查詢: SELECT * FROM books WHERE author IN(SELECT author FROM FROM books WHERE title ='All About Pirates');

1

您可以將一張表加入到選擇的結果中。

例如,你得到的作者(們)相匹配的書是這樣的:

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

所以,你可以加入書表,該表的作者是這樣的:

SELECT books.* 
FROM books 
JOIN (SELECT author FROM books WHERE title="All About Pirates" GROUP BY author) AS r 
ON books.author=r.author; 
2

你的查詢幾乎是正確的。您需要在where子句中指定標題的別名:

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

原始查詢不可解析,因爲標題不明確。在此查詢中,b2是具有匹配作者的書籍列表。

相關問題