首页 文章

检查表是否存在,如果不使用另一个表用于'SELECT'语句

提问于
浏览
0

我还是SQL的新手 . 我正在开发一个在开发中使用Derby数据库和在 生产环境 中使用Oracle的系统 . 我希望有一个适用于两者的SQL语句 . 这是我的代码:

SELECT rma.crspdt AS bic_crspndt,
               rma.issr   AS bic_issr
        FROM   rma
        WHERE  (rma.tp = 'Issued' OR rma.tp = 'Received')
        AND    rma.rmasts = 'Enabled'
        AND    rma.svcnm = 'swift.fin') r
       INNER JOIN (SELECT 1 ID FROM SYSIBM.SYSDUMMY1 UNION ALL
                   SELECT 2 ID FROM SYSIBM.SYSDUMMY1) dummy ON (dummy.id = 1 AND r.bic_crspndt IS NOT NULL)
                                                   OR (dummy.id = 2 AND r.bic_issr IS NOT NULL)

我在这里使用'SYSIBM.SYSDUMM1'表 . Oracle有一个名为'DUAL'的'SYSIBM.SYSDUMM1'的精确替代表 . 问题是,当我在开发(德比)中运行我的代码时,这段代码工作正常,但在 生产环境 (oracle)中,我得到一个错误,说像未知表 .

我想要做的是在我的代码中执行IF-ELSE / CASE-WHEN或类似的东西来检查运行时是否存在'SYSIBM.SYSDUMMY1'表并且如果它不存在(如在oracle中)那么我想要使用'DUAL'表 . 我是SQL的新手,想在这方面提供一些帮助 .

3 回答

  • 0

    你没有见过示威,但没有亲自使用它 . 我建议Oracle文档(像往常一样)获取信息 - https://docs.oracle.com/database/121/DRDAA/sql_transl_arch.htm#DRDAA131 .

  • 0

    你能不能只创建一个DUAL表

  • 0

    从Oracle的角度来看,您的代码存在一些问题,我可以想到 . 所以从评论中我得到的是你无法使用Dual . Oracle中存在双重身份 . 所以尝试运行 select 1 from dual ,如果它不起作用,你的查询肯定没有在oracle中运行 . 除此之外,您的查询还有一些问题 .

    • 使用内部连接之前的位置 .

    • r 的额外关闭括号

    根据以上输入,如果您在 Oracle 中运行此查询,则此查询可能适合您 . 如果您不使用Oracle,请将_2485795替换为dual .

    注意:您应该使用正确的连接语法( INNER JOIN ) . 我无法弄清楚加入条件,因此我使用逗号加入 .

    SELECT rma.crspdt AS bic_crspndt,
           rma.issr AS bic_issr
    FROM rma r,
      (SELECT 1 ID FROM dual UNION ALL
       SELECT 2 ID FROM dual) dummy
    WHERE ( (dummy.id = 1
             AND r.bic_crspndt IS NOT NULL)
           OR (dummy.id = 2
               AND r.bic_issr IS NOT NULL) 
         )
      AND (rma.tp = 'Issued'
           OR rma.tp = 'Received')
      AND rma.rmasts = 'Enabled'
      AND rma.svcnm = 'swift.fin'
    

相关问题