是否可以重写以下查询
SELECT CT.GROUP, CT.EMP_ID, HT.EFF_DT
FROM CURR_TABLE CT
JOIN (SELECT GROUP, EMP_ID, MAX(EFF_DT) AS EFF_DT
FROM HIST_TABLE
WHERE STAT = 'A'
GROUP BY GROUP, EMP_ID) HT ON CT.GROUP = HT.GROUP AND
CT.EMPID = HT.EMP_ID
WHERE CT.GROUP = :1
AND CT.EMP_ID = :2
是否以类似于CROSS JOIN
风格的方式出现?
SELECT table1.column1, table2.column2...
FROM table1, table2 [, table3 ]
原因是我想在Peoplesoft中创建这样的查询,而以上内容只能通过使用group by子句为选择创建单独的视图来实现。我只想在一个查询中执行此操作,而无需创建其他视图。
答案 0 :(得分:1)
您可以尝试将查询编写为具有聚合的单级联接:
SELECT
CT.GROUP,
CT.EMP_ID,
MAX(HT.EFF_DT) AS EFF_DT
FROM CURR_TABLE CT
LEFT JOIN HIST_TABLE HT
ON CT.GROUP = HT.GROUP AND
CT.EMPID = HT.EMP_ID AND
HT.STAT = 'A'
WHERE
CT.GROUP = :1 AND
CT.EMP_ID = :2
GROUP BY
CT.GROUP,
CT.EMP_ID;
请注意,GROUP
是保留的SQL关键字,您可能必须用双引号将其转义才能使此查询(或您所质疑的查询)在Oracle上运行。