Postgres / netezza多个表连接多个表

时间:2014-12-19 10:26:26

标签: sql oracle postgresql join netezza

嗨我从ORACLE迁移到Netezza时遇到问题,如果在使用JOIN之前声明了多个表,则netezza似乎有问题。我怎么能以不同的方式写这个连接?

INSERT INTO...
SELECT...
FROM table1 t1, table2 t2   //here seems to be the problem as postgres dont allow to put two tables in FROM clause if there are JOIN`s involved
JOIN talbe3 t3 ON t2.column = t3.column
JOIN table4 t4 ON t2.column = t4.column
LEFT OUTER JOIN table5 t5 ON (t4.column=t5.column AND t4.column=t2.column AND t4.column=t3.column)

WHERE....;    

1 个答案:

答案 0 :(得分:0)

你根本不应该混合使用旧式(隐式)和新式(显式)连接。事实上,一个简单的规则就是避免使用from子句中的逗号。

我想你遇到的问题是表别名的范围问题。我知道这发生在MySQL中。但是,因为我从不from子句中使用逗号,所以我不知道这会如何影响其他数据库。我认为在逗号之后from子句的部分被解析为一个单元,并且在此解析阶段不知道之前定义的别名。

无论如何,无论出现什么问题,简单的解决方案是用CROSS JOIN替换逗号:

INSERT INTO...
SELECT...
FROM table1 t1 CROSS JOIN table2 t2   //here seems to be the problem as postgres dont allow to put two tables in FROM clause if there are JOIN`s involved
JOIN table3 t3 ON t2.column = t3.column
JOIN table4 t4 ON t2.column = t4.column
LEFT OUTER JOIN table5 t5 ON (t4.column=t5.column AND t4.column=t2.column AND t4.column=t3.column)

WHERE....;   

这应该适用于您提到的所有数据库 - 以及更多。