Select book_id,title
from Publisher
natural join Book natural join Category
where Publisher.name='thomas hardy' AND Category.name='computer science';
答案 0 :(得分: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
作为密钥。而且,我猜测没有发布商的名称与类别名称完全匹配。
答案 1 :(得分:0)
如果使用自然连接,则表示您的表将加入共享相同名称的字段。 Publisher表和Category表中的一个字段是Name
,这意味着自然连接将加入这些字段。
然后,您可以按不同的条件过滤这两个字段。连接两个表后,两个字段中的值不能相同。
这与写作类似:
Select foo FROM bar WHERE foo="something" and foo="Something Else"
没有意义。自然连接很好,但是你总是更好地明确你的JOIN标准,即使它感觉有点多余。毕竟...代码中的注释通常是多余的,但只有一个不能成功的。