嗨我从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....;
答案 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....;
这应该适用于您提到的所有数据库 - 以及更多。