【发布时间】:2019-07-02 02:45:51
【问题描述】:
大家好,下面是我在使用 SQLite 时编写的查询:
SELECT
ad.ID,ad.Script_Name,ad.Current_Status,
ad.Issues_found_during_run,ad.Testers,
ad.Run_Date,ad.Tools,u.fTag,u.role,u.avatar
FROM
allData ad
INNER JOIN
users u
ON
u.fTag = ad.lastUserWhoUpdated
GROUP BY
ad.ID
ORDER BY
ad.ID ASC
这会产生 6 条记录,我认为该查询会出现。
不过,我后来转而使用 Oracle 数据库。这是我正在使用的 Oracle 服务器上的信息:
Oracle Database 12c 企业版 12.2.0.1.0 - 64 位生产
因此,当我将 SQLite 数据转换为 Oracle 并运行相同的查询时,只对 GROUP BY 进行了修改,因为 Oracle 似乎想要 SELECT 语句中的所有名称,而不仅仅是我需要分组的一个:
SELECT
ad.ID,ad.Script_Name,ad.Current_Status,
ad.Issues_found_during_run,ad.Testers,
ad.Run_Date,ad.Tools,u.fTag,u.role,u.avatar
FROM
allData ad
INNER JOIN
users u
ON
u.fTag = ad.lastUserWhoUpdated
GROUP BY
ad.ID,ad.Script_Name,ad.Current_Status,ad.Issues_found_during_run,ad.Testers,ad.Run_Date,ad.Tools,u.fTag,u.role,u.avatar
ORDER BY
ad.ID ASC;
上面在 SQL Developer 中运行时产生 0 条记录。那么,Oracle 需要我做什么来解决这个问题,以便它像 SQLite 版本一样提取 6 条记录?
【问题讨论】:
-
您在使用 SQLite 时编写的查询使用 SQLite 的 功能(或错误),它允许您选择除分组依据的 1 之外的非聚合列。我已经看到了这个 feature 的实际应用,我记得返回的附加列取自每个组的最后一行(尽管不能保证这一点)。如果这是您需要的,您必须提供样本数据和预期结果,以便找到一种方法来区分每组的最后一行。
标签: java oracle inner-join oracle-sqldeveloper