当前位置:  开发笔记 > 编程语言 > 正文

我应该在多个表上使用sql JOIN关键字进行复杂连接吗?

如何解决《我应该在多个表上使用sqlJOIN关键字进行复杂连接吗?》经验,为你挑选了2个好方法。

我有以下要求:

select * 
    from tbA A, tbB B, tbC C, tbD D
where 
    A.ID=B.ID and B.ID2= C.ID2 and A.ID=D.ID and C.ID3=D.ID3 and B.ID4=D.ID4
and
    A.Foo='Foo'

我多次听说过这种连接语法是折旧的,我应该使用'JOIN'关键字.

如何在这种复杂的连接中执行此操作(多个表连接在属于不同表的多个列上)?您认为这种最佳做法仍适用于此吗?



1> Carlos A. Ib..:

这是一个品味问题,但我更喜欢JOIN关键字.它使逻辑更清晰,并且与随之而来的LEFT OUTER JOIN语法更加一致.请注意,您也可以使用与JOIN同义的INNER JOIN.

语法是

   a JOIN b
    ON expression relating b to all of the tables before

b可以是连接本身.对于内部联接并不重要,但对于外部,您可以控制联接的顺序,如下所示:

select * from
   a left join
      d join c
      on d.i = c.i
   on a.k = d.k 

这里a左连接到d和c之间的内连接.

这是您的查询:

select * 
    from tbA A
    join tbB B on A.ID = B.ID
    join tbC C on B.ID2 = C.ID2
    join tbD D on A.ID = D.ID and C.ID3 = D.ID3 and B.ID4 = D.ID4
where 
    A.Foo='Foo'



2> user76035..:

我发现连接语法更容易理解

select *
from tbA A
inner join tbB B on a.id = b.id
inner join tbC C on b.id2 = c.id2
inner join tbD D on a.id = d.id and c.id3 = d.id3 and b.id4 = d.id4
where A.Foo='Foo'

现在,您可以清楚地看到数据如何连接在一起,并且它不是一个非常复杂的连接.

顺便说一下,你的例子中的数据库设计强烈缺乏正常化的气味.通常你应该有一个表连接到许多(a.bid上的连接b = b.bid连接c在a.cid = c.cid上)或链(a.bid上的连接b = b.bid连接c在b.cid = c.cid).

编辑.添加了可选关键字INNER,它不会改变结果,但会更清晰.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有