sql - Postgres/netezza 从多个表进行多重连接

标签 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....;    

最佳答案

您根本不应该混合使用旧式(隐式)和新式(显式)联接。事实上,一个简单的规则就是避免在 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/

相关文章:

PostgreSQL 查询 - 返回过去 5 分钟字段的所有结果

c# - 自定义 FluentMigrator Postgres VersionInfo Schema

database - 如何登录 LBACSYS 用户?

PostgreSQL '%' 运算符

sql - SSIS - 跳过丢失的文件

mysql - SQL Group By 对其他表中的字段进行分组

MySQL 将行转为动态数量的列

mysql - 使用 SQL 计算字符串和 Group By 中字符的出现次数

java - 在java中使用blueprint中定义的数据源访问oracle db

css - StyleClass 被忽略