【问题标题】:SQLite to Oracle 0 records showing upSQLite 到 Oracle 0 条记录出现
【发布时间】: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


【解决方案1】:

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

on u.fTag = ad.lastUserWhoUpdated

导致没有行被检索。

因此:

  • 您确定这两个表中有匹配的值吗?
  • 检查这两列的数据类型,特别是如果其中一个(或两个)是CHAR(我的意思是CHAR,而不是VARCHAR2),用空格 em> 到整个列的大小,所以你可以试试

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

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

【讨论】:

    【解决方案2】:

    你可以这样使用:

    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

    【讨论】:

    • 在 SQL Developer 中运行也返回 0 条记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多