Select book_id,title
from Publisher
natural join Book natural join Category
where Publisher.name='thomas hardy' AND Category.name='computer science';
问问题
523 次
2 回答
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
用作键。而且,我猜没有出版商的名称与类别名称完全匹配。
于 2014-12-02T21:25:29.910 回答
0
如果您使用自然连接,则意味着您的表将连接共享相同名称的字段。Publisher 表和 Category 表中的字段之一是Name
这意味着自然联接将在这些字段上联接。
然后,您可以按不同的条件过滤这两个字段。两个表连接后,两个字段不能有不同的值。
这将类似于编写:
Select foo FROM bar WHERE foo="something" and foo="Something Else"
这没有道理。自然连接很好,但你几乎总是最好明确你的 JOIN 标准,即使它感觉有点多余。毕竟......代码中的注释通常是多余的,但只有一个混蛋不会使它们。
于 2014-12-02T21:26:26.443 回答