需要通过查询将MySQL组转换为oracle

时间:2014-01-29 06:34:03

标签: mysql sql oracle11g

如何将此查询转换为Oracle group By。将应用程序从MySQL迁移到Oracle数据库时,我遇到了这个问题。

SELECT j.id                   AS j__id
,      j.processing_office_id AS j__processing_office_id
,      j.lga_id               AS j__lga_id
,      j.created_at           AS j__created_at
,      j.updated_at           AS j__updated_at
,      j.created_by           AS j__created_by
,      j.updated_by           AS j__updated_by
,      j.deleted_at           AS j__deleted_at
,      t.name                 AS t__0
,      t3.id                  AS t3__1
,      t3.name                AS t3__2 
FROM   join_processing_office_state_lga j 
LEFT 
JOIN   tbl_lga t 
ON     j.lga_id = t.id 
AND    t.deleted_at IS NULL
AND    t.active_flag = 'Y'
LEFT 
JOIN   tbl_procesing_office t2
ON     j.processing_office_id = t2.id
LEFT 
JOIN   tbl_state t3 
ON     t.state_id = t3.id
AND    t3.deleted_at IS NULL
AND    t3.active_flag = 'Y'
WHERE  t2.active_flag = 'Y' 
AND    t2.active_flag = 'Y' 
AND    j.deleted_at IS NULL
GROUP 
BY     t.state_id
ORDER 
BY     t3.name

1 个答案:

答案 0 :(得分:1)

您的查询在一列上使用group by。与Sybase等其他平台不同,Oracle要求所有单独的选择元素都在group by中出现,或者在summaxavg等组功能中使用。 我认为这个要求是好事;它使查询的结果具有确定性。 要将此查询移植到Oracle,请确保每个选择项目:

  • 将其包含在group by中(现在可以使用别名或完整表达式完成)。
  • 或将其包含在max等组功能中。

如果您需要小计等,请考虑使用分析功能。它们允许您指定计算某些内容的不同窗口。或者使用grouping sets等。祝你好运!