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

Bra*_*ann 9 sql join

我有以下要求:

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'
Run Code Online (Sandbox Code Playgroud)

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

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

Car*_*rra 12

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

语法是

   a JOIN b
    ON expression relating b to all of the tables before
Run Code Online (Sandbox Code Playgroud)

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

select * from
   a left join
      d join c
      on d.i = c.i
   on a.k = d.k 
Run Code Online (Sandbox Code Playgroud)

这里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'
Run Code Online (Sandbox Code Playgroud)


use*_*035 5

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

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'
Run Code Online (Sandbox Code Playgroud)

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

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

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