自然连接在mysql中返回零行

时间:2014-12-02 21:18:58

标签: mysql database mysqli phpmyadmin

Select book_id,title
from   Publisher
natural join Book natural join Category
where Publisher.name='thomas hardy' AND Category.name='computer science';

2 个答案:

答案 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标准,即使它感觉有点多余。毕竟...代码中的注释通常是多余的,但只有一个不能成功的。