嘿,下面有我在使用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条记录?
答案 0 :(得分:0)
您可以使用以下内容:
SELECT
ad.ID,MAX(ad.Script_Name), MAX(ad.Current_Status),
MAX(ad.Issues_found_during_run), MAX(ad.Testers),
MAX(ad.Run_Date), MAX(ad.Tools), MAX(u.fTag),MAX(u.role),MAX(u.avatar)
FROM
allData ad
INNER JOIN
users u
ON
u.fTag = ad.lastUserWhoUpdated
GROUP BY
ad.ID
ORDER BY
ad.ID ASC;
此处提供有关聚集功能的更多信息:
答案 1 :(得分:0)
(至少对我来说)没有意义。没有WHERE
子句会限制返回的行数。 GROUP BY
当然不需要做任何事情。唯一可疑的是
on u.fTag = ad.lastUserWhoUpdated
这导致没有行被检索。
因此:
检查这两列的数据类型,特别是如果其中一个(或两个)都是CHAR
(我的意思是 CHAR ,而不是VARCHAR2
),则其值右移用空白达到整个列的大小,因此您可以尝试使用
on trim(u.fTag) = trim(ad.lastUserWhoUpdated)
有其缺点(除非使用基于函数的索引,否则将不使用索引),因此-如果事实如此,请将数据类型修改为VARCHAR2
。