您好,我在从 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....;
最佳答案
您根本不应该混合使用旧式(隐式)和新式(显式)联接。事实上,一个简单的规则就是避免在 from
子句中使用逗号。
我想您遇到的问题是表别名的范围界定问题。我知道这发生在 MySQL 中。但是,因为我从不在from
子句中使用逗号,所以我不知道这对其他数据库有何影响。我认为 from
子句 after 的部分被解析为一个单元,并且在此解析阶段不知道之前定义的别名。
无论如何,无论出现什么问题,简单的解决方案是用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....;
这应该适用于您提到的所有数据库——甚至更多。
关于sql - Postgres/netezza 从多个表进行多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27564030/