sql - 将 Oracle SQL Select 转换为 PostgreSQL Select

标签 sql database oracle postgresql plsql

我有这个 SQL 语句:

SELECT ABX.ABX_APO_NUMBER,
       COUNT(A1.PROCESS_MODE) AS NUM_PLANNING,
       COUNT(A2.PROCESS_MODE) AS NUM_SETUP,
       COUNT(A3.PROCESS_MODE) AS NUM_OUTPUT
  FROM ABX, USER_INSTANCE U, ACTIVE_PROCESS A1,
       ACTIVE_PROCESS A2, ACTIVE_PROCESS A3
 WHERE U.ABX_APO_NUMBER (+) = ABX.ABX_APO_NUMBER
   AND A1.PROCESS_INSTANCE_NUMBER (+) = U.INSTANCE_NUMBER
   AND A1.PROCESS_MODE (+)= 'PLANNING'
   AND A2.PROCESS_INSTANCE_NUMBER (+) = U.INSTANCE_NUMBER
   AND A2.PROCESS_MODE (+) = 'SETUP'
   AND A3.PROCESS_INSTANCE_NUMBER (+) = U.INSTANCE_NUMBER
   AND A3.PROCESS_MODE (+) = 'OUTPUT'
 GROUP BY ABX.ABX_APO_NUMBER

(+) 导致 PG 不适...我可以只删除它们吗,它的意思是一样的吗? Postgres 可以理解的等效项是什么?

最佳答案

这是使用 ANSI-92 JOIN 语法重写的查询:

  SELECT a.abx_apo_number,
         COUNT(ap1.process_mode) AS NUM_PLANNING,
         COUNT(ap2.process_mode) AS NUM_SETUP,
         COUNT(ap3.process_mode) AS NUM_OUTPUT
     FROM ABX a
LEFT JOIN USER_INSTANCE u ON u.abx_apo_number = a.abx_apo_number
LEFT JOIN ACTIVE_PROCESS ap1 ON ap1.process_instance_number = u.instance_number
                            AND ap1.process_mode = 'PLANNING'
LEFT JOIN ACTIVE_PROCESS ap2 ON ap2.process_instance_number = u.instance_number
                            AND ap2.process_mode = 'SETUP'
LEFT JOIN ACTIVE_PROCESS ap3 ON ap3.process_instance_number = u.instance_number
                            AND ap3.process_mode = 'OUTPUT'
 GROUP BY a.abx_apo_number

(+) 是 Oracle 特定的 LEFT OUTER JOIN 语法。要删除它,将要求每个 USER_INSTANCE.instance_number 必须具有所有三种进程模式的值:PLANNING、SETUP 和 OUTPUT - 省略一个,abx_apo_number 将不会显示在输出。

关于sql - 将 Oracle SQL Select 转换为 PostgreSQL Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2268732/

相关文章:

mongodb - NoSQL 数据库之间有什么区别,它们与传统关系数据库有何不同?

oracle - 从包内动态调用私有(private)过程

sql - 消息 16929,游标为只读 - 为什么?

mysql - 需要帮助编写需要表连接的查询

单表查询的SQL Query帮助

mysql cross join 进不去?

python - 如何将 pyodbc.row 拆分为其值列表

java - 由sequencegenerator生成的主键错误地写入数据库

.net - SSIS 中的 Hyperion Essbase 连接

mysql - 从多个表中选择和求和