将 Oracle 外连接转换为 SQL Server
Posted
技术标签:
【中文标题】将 Oracle 外连接转换为 SQL Server【英文标题】:Convert Oracle outer join to 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 条件),并且通常不会影响性能,因为这样的条件大多被数据库忽略。
【参考方案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;
【讨论】:
以上是关于将 Oracle 外连接转换为 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章