SQLite to Oracle 0记录显示

时间:2019-02-07 21:28:16

标签: java oracle inner-join oracle-sqldeveloper

嘿,下面有我在使用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条记录?

2 个答案:

答案 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;

此处提供有关聚集功能的更多信息:

https://docs.oracle.com/database/121/SQLRF/functions003.htm

答案 1 :(得分:0)

(至少对我来说)没有意义。没有WHERE子句会限制返回的行数。 GROUP BY当然不需要做任何事情。唯一可疑的是

on u.fTag = ad.lastUserWhoUpdated

这导致没有行被检索。

因此:

  • 您确定这两个表中是否有匹配的值?
  • 检查这两列的数据类型,特别是如果其中一个(或两个)都是CHAR(我的意思是 CHAR ,而不是VARCHAR2),则其值右移用空白达到整个列的大小,因此您可以尝试使用

    on trim(u.fTag) = trim(ad.lastUserWhoUpdated)
    

    有其缺点(除非使用基于函数的索引,否则将不使用索引),因此-如果事实如此,请将数据类型修改为VARCHAR2