【发布时间】:2020-03-09 14:41:11
【问题描述】:
我有一个有点奇怪的问题。为了让一些旧软件在较新版本的 MS SQL Server 上运行,我必须去掉外连接运算符“*=”和“=*”。不幸的是,我只能操纵否则动态构建的 sql 查询的 where 子句。没有办法从整体上重新设计查询。因此我的问题是:
有没有办法通过 where 子句模拟外连接而不使用外连接操作符?
目标是将数据库从支持运算符的兼容级别 80(即“2000”)升级到不支持运算符的最新级别。
非常感谢。
【问题讨论】:
-
您需要展示一个示例。我很确定答案通常是否定的,但也许在某些特定情况下。
-
我担心答案可能是否定的:-/ 后台的机制是一个自定义的 O/R 映射器,它使用 C# 类的属性上的属性来生成使用外连接运算符的连接。因此没有具体案例。
-
软件是自动插入
WHERE关键字还是你可以控制?如果是这样,那么您可能可以先插入OUTER JOIN语法,如果不是,那么我认为您不走运,抱歉。 -
左连接是相应内连接的 UNION ALL,其中不匹配的内连接行由空值扩展。因此,您不能使用 WHERE 从内部提取左侧。但是,您可以通过一行null交叉连接原始2个表,或者将空行添加到右侧表,然后在何处恰当地选择。但目前尚不清楚允许进行哪些转换或为什么进行转换。如果您能清楚而完整地描述您可以和不能对 * 查询范围进行哪些转换,这将有所帮助。是什么阻止您将整个查询(SQL 或 ORM)转换为使用关键字连接?
标签: sql sql-server outer-join