SQLite 到 Oracle 0 记录显示



嘿,我在下面有我在使用 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 数据库 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 开发人员中运行时,上述内容将生成 0 条记录。那么,Oracle 需要我做什么来解决这个问题,以便它像 SQLite 版本一样提取 6 条记录?

你可以使用这样的东西:

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

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

on u.fTag = ad.lastUserWhoUpdated

这导致没有检索到任何行。

因此:

  • 是否确定这两个表中存在匹配的值?
  • 检查这两列的数据类型,特别是如果一列(或两列(CHAR(我的意思是 CHAR,而不是 VARCHAR2 (,它会用空格右键填充值,直到整个列大小所以你可以尝试使用

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

    这有其缺点(索引不会被使用,除非它是基于函数的(,所以 - 如果事实证明是这种情况,请将数据类型修改为 VARCHAR2 .

最新更新