也許我在這里很愚蠢,但我不明白為什么在下面的示例中,相關子查詢有效,而簡單子查詢卻沒有。有人可以解釋為什么嗎?
在示例資料庫中,與作者一起作業的作者列在作者表中,而 title_authors 表提供了有關作者是否寫過或合著過任何書籍的資訊。au_id 是作者的 PK 和 title_authors 中復合 PK 的一部分。如果royalty_share 列設定為“1”,則表示作者是一本書的唯一作者。
為什么相關子查詢能夠為我提供在royalty_share 列中具有“1”的作者,但簡單的子查詢只為我提供所有作者,而不管royalty_share 列中的內容是什么?
books=> select au_fname, au_lname from authors a where 1 in (select royalty_share from title_authors ta where a.au_id = ta.au_id);
au_fname | au_lname
----------- -----------
Sarah | Buchman
Wendy | Heydemark
Klee | Hull
Christian | Kells
| Kellsey
books=> select au_fname, au_lname from authors a where 1 in (select royalty_share from title_authors);
au_fname | au_lname
----------- -------------
Sarah | Buchman
Wendy | Heydemark
Hallie | Hull
Klee | Hull
Christian | Kells
| Kellsey
Paddy | O'Furniture
uj5u.com熱心網友回復:
在查詢的其余部分的背景關系之外考慮此條件:
where 1 in (select royalty_share from title_authors)
無論您的查詢中的任何其他內容如何,??只要至少有title_authors一行royalty_shareset to 1 for any author,此條件都會為真。這就是您的第二個查詢回傳所有作者的原因。
當子查詢相關時,條件會更改以將行限制title_authors為“外部”表中的作者,這就是您要查找的內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/346157.html
標籤:sql PostgreSQL
上一篇:SQL全文搜索不包含精確
