期望实现三表连接的书写方式是这样子:
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.字段号