sql join语法

Nat*_*ars 4 sql syntax join

我是一个新的编写SQL,我有一个关于连接的问题.这是一个选择示例:

select bb.name from big_box bb, middle_box mb, little_box lb
where lb.color = 'green' and lb.parent_box = mb and mb.parent_box = bb;
Run Code Online (Sandbox Code Playgroud)

所以我要说的是,我正在寻找所有大盒子的名字,这些盒子里面嵌套着一个绿色的小盒子.如果我理解正确,上面的语法是通过使用'join'关键字获得相同结果的另一种方法.

问题:上面的select语句是否对它正在进行的任务有效?如果没有,有什么更好的方法呢?是连接的语句语法糖还是实际上正在做其他事情?

如果你有关于这个主题的任何好材料的链接,我很乐意阅读它,但由于我不知道究竟是什么称这种技术,我在谷歌上搜索它有困难.

Mar*_*ers 12

您正在使用隐式连接语法.这相当于使用JOIN关键字,但最好完全避免使用此语法,而是使用显式连接:

SELECT bb.name
FROM big_box bb
JOIN middle_box mb ON mb.parent_box = bb.id
JOIN little_box lb ON lb.parent_box = mb.id
WHERE lb.color = 'green'
Run Code Online (Sandbox Code Playgroud)

您还在连接条件中缺少列名称.我猜这个列被调用了id.

如果正确索引表,则此类查询应该是高效的.特别是在连接条件和索引上应该有外键约束little_box.color.

您的查询存在的问题是,如果单个框中有多个绿色框,则会返回重复的行.可以通过在SELECT之后添加DISTINCT来删除这些重复项.