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. 自然連接不返回行
- 2. Android BluetoothSocket連接返回零
- 3. mysql左連接不返回來自連接表的行
- 4. 使用內部連接返回零行的MySQL查詢
- 5. 如果套接字仍然連接,EndReceive是否會返回零?
- 6. 自然聯接未返回空行
- 7. MySql的自聯接子內連接返回交叉連接
- 8. MySQL的左連接返回行
- 9. MySQL返回連接表的第一行
- 10. mysql左連接不返回空行
- 11. MySQL連接返回NULL?
- 12. MySQL表自連接返回的行數太多
- 13. MySQL返回空結果集(即零行)
- 14. MySQL的返回行有了零計數
- 15. 自然連接的MySQL別名錯誤;
- 16. 自然連接mysql中的3個表
- 17. Java簡單串行連接器(jSSC):getInputBufferBytesCount返回零
- 18. MySQL的左連接和零
- 19. 自然連接和左連接在一起在MySQL
- 20. mysql連接4個表返回空值
- 21. Python mysql連接器返回元組
- 22. MYSQL連接查詢返回空結果
- 23. mysql左連接不返回值
- 24. MySQL左連接返回錯誤
- 25. 我的mysql連接返回錯誤?
- 26. python mysql連接器Fetchone返回沒有
- 27. MySQL .Net連接器 - MySqlReader.Read()返回false
- 28. Mysql左連接不返回空值
- 29. MySQL的左連接返回空結果
- 30. mysql字符串連接返回0
這太糟糕了?你有問題嗎? – 2014-12-02 21:21:55
你爲什麼使用'NATURAL JOIN'?這裏有什麼要求? – tadman 2014-12-02 21:21:58
我需要獲取特定發佈商和類別的所有圖書標題,以便從表中搜索這兩個id,然後將其與書籍表加入以查找書籍,是否應該不使用自然聯接? – user3600154 2014-12-02 21:24:54