【问题标题】:Convert Oracle outer join to SQL Server将 Oracle 外连接转换为 SQL Server
【发布时间】:2014-07-20 15:35:53
【问题描述】:

我无法将此 Oracle SQL 转换为 SQL 服务器。

这是查询:

    SELECT CM.ModuleID,
           CM.ModuleDescription,
           CM.ImageIndex,
            CASE
             WHEN CMAC.ClassID IS NULL THEN
              'N'
             ELSE
              'Y'
           END AS Checked
      FROM APP_MODULES         CM,
           APP_PROFILE         CMAP,
           APP_PROFILE_CLASS   CMAC
      WHERE 1 = 1
       AND CM.ParentModuleID IS NULL
       AND CMAP.ProfileID(+) = CMAC.ProfileID
       AND CM.ModuleID = CMAC.ModuleID(+)
       AND CMAC.ProfileID(+) = P_ProfileID
       AND CM.Activated = 'Y'
     ORDER BY CM.Ordem;

谁能帮帮我?

【问题讨论】:

  • 欢迎来到 SO。请阅读How to Ask。首先,(+) 是旧的、特定于 oracle 的外连接语法。你肯定需要改变它。
  • 除了@OldPrrogrammer 合理的建议之外,我不明白 WHERE 1 = 1 条件的必要性。
  • @rontornambe 这种情况通常是由于装配工造成的。您可以使用WHERE 1=1 <FILTERS> 编写查询,并使用AND Condition1 AND Condition2 AND ... 替换过滤器,条件数不限。这样,过滤器构建器可以非常简单(它不必生成实际的 where 子句)灵活(您可以有其他“硬编码” where 条件),并且通常不会影响性能,因为这样的条件大多被数据库忽略。

标签: sql sql-server oracle


【解决方案1】:

这应该在 SQL Server 中工作:

SELECT CM.ModuleID,
       CM.ModuleDescription,
       CM.ImageIndex,
        CASE
         WHEN CMAC.ClassID IS NULL THEN
          'N'
         ELSE
          'Y'
       END AS Checked
  FROM APP_MODULES         CM,
       LEFT JOIN APP_PROFILE_CLASS CMAC 
            ON(CMAC.ProfileID = P_ProfileID AND CM.ModuleID = CMAC.ModuleID)
       LEFT JOIN APP_PROFILE CMAP
            ON(CMAP.ProfileID = CMAC.ProfileID)
  WHERE 1 = 1
   AND CM.ParentModuleID IS NULL
   AND CM.Activated = 'Y'
 ORDER BY CM.Ordem;

【讨论】:

    猜你喜欢
    • 2017-04-08
    • 2021-05-27
    • 2021-06-06
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2016-12-19
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多