Select book_id,title
from Publisher
natural join Book natural join Category
where Publisher.name='thomas hardy' AND Category.name='computer science';
2
A
回答
2
只是爲了避免natural join
。它會查找相同的列,並且您可能會錯過某處。例如,我創建的幾乎所有表都有一個CreatedAt
列。那會導致NATURAL JOIN
失敗。
相反,包括USING
條款或明確ON
:
Select book_id,title
from Publisher join
Book
using (Publisher_Id) join
Category
using (Category_Id)
where Publisher.name = 'thomas hardy' AND Category.name = 'computer science';
事實上,謎團解開。 NATURAL JOIN
將嘗試使用name
作爲關鍵。而且,我猜測沒有任何發佈商擁有與某個類別名稱完全匹配的名稱。
0
如果您使用自然聯接,這意味着您的表將加入共享相同名稱的字段。您的Publisher表格和您的類別表中的一個字段是Name
,這意味着自然連接將加入這些字段。
然後按不同的標準過濾兩個字段。兩個表連接後,兩個字段中的值不能相同。
這將類似於寫作:
Select foo FROM bar WHERE foo="something" and foo="Something Else"
這是沒有意義的。自然連接很好,所有的,但你幾乎總是明白你的JOIN標準,即使它感覺有點多餘。畢竟...代碼中的註釋通常是多餘的,但只有一個不能使它們成爲的東西。
相關問題
- 1. Android BluetoothSocket連接返回零
- 2. mysql左連接不返回來自連接表的行
- 3. 如果套接字仍然連接,EndReceive是否會返回零?
- 4. 自然聯接未返回空行
- 5. MySql的自聯接子內連接返回交叉連接
- 6. MySQL的左連接返回行
- 7. MySQL返回連接表的第一行
- 8. mysql左連接不返回空行
- 9. MySQL連接返回NULL?
- 10. MySQL表自連接返回的行數太多
- 11. MySQL的返回行有了零計數
- 12. MySQL返回空結果集(即零行)
- 13. 自然連接opertaion只返回第一個表中的MySQL數據庫
- 14. 自然連接mysql中的3個表
- 15. 自然連接的MySQL別名錯誤;
- 16. Java簡單串行連接器(jSSC):getInputBufferBytesCount返回零
- 17. MySQL的左連接和零
- 18. 自然連接和左連接在一起在MySQL
- 19. MySQL左外連接返回NULL值
- 20. mysql連接4個表返回空值
- 21. mysql左連接不返回值
- 22. mysql字符串連接返回0
- 23. MYSQL連接查詢返回空結果
- 24. 在mysql中返回null的表連接
- 25. 我的mysql連接返回錯誤?
- 26. wssql總是返回零行
- 27. SELECT FOR UPDATE返回零行
- 28. 自連接只返回一個記錄
- 29. MySQL的自聯接返回空值
- 30. 即使列名相同且具有單個匹配列,自然連接查詢也會返回零結果
這太糟糕了?你有問題嗎? – 2014-12-02 21:21:55
你爲什麼使用'NATURAL JOIN'?這裏有什麼要求? – tadman 2014-12-02 21:21:58
我需要獲取特定發佈商和類別的所有圖書標題,以便從表中搜索這兩個id,然後將其與書籍表加入以查找書籍,是否應該不使用自然聯接? – user3600154 2014-12-02 21:24:54