使用包含 GROUP BY 子句的 table 连接重写查询
Rewriting query with table join containing GROUP BY clause
是否可以重写以下查询
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子句为选择创建一个单独的视图来实现。我只想在一个查询中执行此操作而不创建其他视图。
您可以尝试将查询编写为具有聚合的单级连接:
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 上运行。
是否可以重写以下查询
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子句为选择创建一个单独的视图来实现。我只想在一个查询中执行此操作而不创建其他视图。
您可以尝试将查询编写为具有聚合的单级连接:
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 上运行。