sql连接多表

期望实现三表连接的书写方式是这样子:

SELECT * FROM TABLE1 JOIN TABLE2 JOIN TABLE3 
ON TABLE1.COL1 = TABLE2.COL1 = TABLE3.COL1

然而我们要考虑到内连接和外连接方式是可选的,以及表连接之间的条件是复杂的,如果认同上述书写方式,那么在多个条件相互叠加的时候主体就会指代不清,执行顺序也不是很确定:

SELECT * FROM TABLE1 JOIN (TABLE2 JOIN TABLE3) JOIN TABLE4
ON TABLE1.COL1 = TABLE2.COL1 = TABLE3.COL1 
   AND TABLE4.COL1 >TABLE2.COL2

在表名连接书写的时候可以结合括号进行约束,但条件如果堆成一堆,语言解释的复杂性就会增加,实现起来预计容易产生二义性,也不利于语句优化。

所以还是只能在两两之间进行迭代书写,看着复杂,但解释的逻辑反而简单些。

SELECT * FROM 
(TABLE1 JOIN (TABLE2 JOIN TABLE3 ON TABLE2.COL1 = TABLE3.COL1 ) ON 
TABLE1.COL1 = TABLE2.COL1) JOIN TABLE4 ON TABLE4.COL1 >TABLE2.COL2

语法格式可以概括为:

FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) 
INNER JOIN 表3 ON 表1.字段号=表3.字段号) 
INNER JOIN 表4 ON Member.字段号=表4.字段号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值