在 SQL Server 中强制部分连接顺序

2023-12-31

Edit:人们很难理解我想要什么。这里有一些漂亮的图片,详细地解释了它。

首次加入交易 to Strange:

到目前为止的结果

Customer  Invoice  TransactionID  Mass  Length                LeptonNumber
========  =======  =============  ====  ====================  ============
Ian       One      1              Ian   Judgement Spaulders   50
Ian       One      1              Ian   Glorious Breastplate  50
Chris     Two      2              Chris Barenavel             2

现在尝试将剩余的行与Down:

到目前为止的结果

Customer  Invoice         TransactionID  Mass  Length                LeptonNumber
========  =======         =============  ====  ====================  ============
Ian       One             1              Ian   Judgement Spaulders   50
Ian       One             1              Ian   Glorious Breastplate  50
Chris     Two             2              Chris Barenavel             2
Jamie     Krol Blade      3              Jay   Krol Blade            90
Jay       Arcanite Reaper 4              Ian   Arcanite Reaper       90

最后,将剩余的行连接到Charmed:

到目前为止的结果

Customer  Invoice         TransactionID  Mass    Length                LeptonNumber
========  =======         =============  ====    ====================  ============
Ian       One             1              Ian     Judgement Spaulders   50
Ian       One             1              Ian     Glorious Breastplate  50
Chris     Two             2              Chris   Barenavel             2
Jamie     Krol Blade      3              Jay     Krol Blade            90
Jay       Arcanite Reaper 4              Ian     Arcanite Reaper       90
Potatoe   Dan Quayle      5              Potatoe Dan Quayle            90

以及如何查看我们剩下的行:

给我我想要的结果集

Customer  Invoice         TransactionID  Mass    Length                LeptonNumber
========  =======         =============  ====    ====================  ============
Ian       One             1              Ian     Judgement Spaulders   50
Ian       One             1              Ian     Glorious Breastplate  50
Chris     Two             2              Chris   Barenavel             2
Jamie     Krol Blade      3              Jay     Krol Blade            90
Jay       Arcanite Reaper 4              Ian     Arcanite Reaper       90
Potatoe   Dan Quayle      5              Potatoe Dan Quayle            90
Stapler   Alexstraza      6              NULL    NULL                  NULL

我有一个主表:

Transactions
+----------+
|          |
|          | 
|          |
|          |
|          |
|          |
|          |
+----------+

我希望此表中的每一行仅连接one可能的匹配表:

Tranasctions        Strange
+----------+      +----------+
| row 1 ===|=====>| row 1    |         Down
| row 2 ===|=====>| row 2    |       +---------+
| row 3 ===|======+----------+======>| row 1   |        Charmed
| row 4 ===|========================>| row 2   |       +---------+
| row 5 ===|=========================+---------+======>| row 1   |
| row 6 ===|==========================================>| row 2   |
+----------+                                           +---------+

通常我会作为连接来执行Transactions到集合Strange || Down || Charmed:

SELECT
   Transactions.*,
   Quarks.Mass,
   Quarks.Length,
   Quarks.LeptonNumber
FROM Transactions
    INNER JOIN NationalSecurityLetters
    ON Transactions.TransactionID = NationalSecurityLetters.ReferenceNumber

    LEFT JOIN (
       SELECT 'Strange' AS Type, * FROM Strange
       UNION ALL
       SELECT 'Down' AS Type, * FROM Down
       UNION ALL
       SELECT 'Charmed' AS Type, * FROM Charmed
    ) Quarks
    ON (
        (Quarks.Type = 'Strange' AND Transactions.Customer = Quarks.Mass)
        OR
        (Quarks.Type = 'Down' AND Transactions.Invoice = Quarks.Length)
        OR
        (Quarks.Type = 'Charmed' AND Transactions.Customer = Quarks.Length)    
    )       

问题是我希望加入按首选顺序发生:

  • Strange
  • Down
  • Charmed

单个事务完全有可能在多个表中具有匹配的条目。但对于每一种可能JOIN of Transactions对于其他表,我希望 SQL Serverprefer the Strange桌子。如果没有匹配,则转到Down桌子。如果没有比赛可去Charmed table.

If you find a match in      Prefer the matching row from
==========================  ============================
Strange                     Strange
Strange and Down            Strange
Strange, Down, and Charmed  Strange
Down                        Down
Down and Charmed            Down
Charmed                     Charmed
(no match?)                 (then there's no match)

我考虑过使用OPTION(FORCE ORDER) clause:

SELECT *
FROM Transactions
    INNER JOIN NationalSecurityLetters
    ON Transactions.TransactionID = NationalSecurityLetters.ReferenceNumber

    LEFT JOIN (
       SELECT 'Strange' AS Type, * FROM Strange
       UNION ALL
       SELECT 'Down' AS Type, * FROM Strange
       UNION ALL
       SELECT 'Charmed' AS Type, * FROM Strange
    ) Quarks
    ON (
        (Quarks.Type = 'Strange' AND Transactions.Customer = Quarks.Mass)
        OR
        (Quarks.Type = 'Down' AND Transactions.Invoice = Quarks.Length)
        OR
        (Quarks.Type = 'Charmed' AND Transactions.Customer = Quarks.Length)    
    )       
OPTION (FORCE ORDER)

但我不想强迫 SQL Server 加入

  • Transactions ==> NationalSecurityLetters,什么时候加入可能更有利
  • NationalSecurityLetters ==> Transactions


正如@AaronBertrand 提到的,我有点不清楚你想要做什么,但是如果你正在谈论改变你的输出,你可以使用 COALESCE 吗?例子:

SELECT COALESCE(s.Value, d.Value, c.Value), t.*
FROM Transactions as t
LEFT JOIN Strange as s
ON t.id = s.tid
LEFT JOIN Down as d
ON t.id = d.tid
LEFT JOIN Charmed as c
ON t.id = c.tid
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL Server 中强制部分连接顺序 的相关文章

随机推荐

  • 不使用 Javascript 从 Google 地图获取路线和方向?

    因此 如果您正在编写一个应用程序 而不是网站 并且需要解析从一个位置到另一个位置的路线 那么如何在不使用 Javascript 的情况下从 Google 地图获取信息呢 我想知道 Google 地图上是否有任何一组特殊的 URL 或 API
  • 找不到盒子“laravel/homestead”

    我已经下载了laravel homestead手动装箱here https atlas hashicorp com laravel boxes homestead 我成功添加了盒子 vagrant box add file path to
  • 在 Bash 中,有没有办法在双引号中将变量展开两次?

    为了调试我的脚本 我想在每个输出的开头添加内部变量 FUNCNAME 和 LINENO 这样我就知道输出发生在哪个函数和行号上 foo local bar something echo FUNCNAME LINENO I just set
  • Pyinstaller 设置图标不改变

    当我使用命令时 pyinstaller exe icon test ico F noconsole test py 所有图标均不会更改为 test ico 一些图标保留为 pyinstaller 的默认图标 Why 所有图标均更改为 视窗
  • 使用字母间距填充div

    我遇到的问题是填写div与文本使用letter spacing 主要问题是我不知道宽度div 首先我想使用 text align justify 但从那以后我一直在黑暗中奔跑 不知道如何解决这个问题 我猜想一些脚本魔法可能会解决这个问题 一
  • 冲突的类型和先前的 x 声明在这里......什么?

    当我有时间的时候 我已经自学了几个月的 C 语言 但我遇到了一个我不知道如何解决的问题 具体来说 当我尝试使用 gcc 编译它时 我得到 geometry c 8 error conflicting types for trapezoid
  • 来自带有时区和夏令时的字符串的 Qt QDateTime

    我正在从字符串插入时间 QDateTime time QDateTime fromString Wed Mar 26 22 37 40 2019 GMT 08 qDebug lt
  • 从通知区域发出的卡通语音气泡叫什么?如何创建一个?

    谁能告诉我以下弹出窗口的名称是什么 如何为我的应用程序创建这样的弹出窗口 To be more specific this is indeed called a Notification http msdn microsoft com en
  • Clojure中如何加载程序资源

    如何在 Clojure 程序中加载图标 字符串 图形元素 脚本等程序资源 我使用的项目布局类似于许多 Java 项目中的布局 其中有一个 资源 目录挂在 源 目录下 jar 文件是从源代码创建的并包含资源 但我似乎无法像在 Java 中那样
  • 将 JWK json 转换为公钥 golang (lestrrat-go)

    我使用 JWKS 格式从身份验证服务提供公钥 该公钥可用于验证来自该身份验证服务的令牌 但是 要执行验证 我需要从 JWK 重建公钥 我该如何转换它 type JWKeys struct Keys JWKey json keys type
  • 多选到数组

  • 使用 SharePoint 客户端对象模型检查列表列是否存在?

    使用 SharePoint 2010 中的客户端对象模型 C 如何确定给定列表中是否存在指定的列 字段 名称 谢谢 魔术安迪 刚刚在搜索相同的东西时发现了这个 但看起来 Sharepoint 2010 有内置的东西 至少对于服务器模型 li
  • 图像未通过 android webview 加载

    我有一个加载网页的网络视图 有时该网页中有图片 但是 我遇到了 2 个图像无法加载的情况 并且每个情况都给出了不同的结果 结果 1 网页已加载 但图像未加载 使用的格式 jpeg 结果 2 网页已加载 但图像未加载 然而 在该图像所在的位置
  • 转义保留字

    Sitecore 提供了一种转义 Sitecore 查询中包含不喜欢字符的单词的方法 此类字符包括连字符和空格 为了简化我的生活 我编写了一个简单的辅助函数 可以转义 Sitecore 查询的每个部分 并且它运行良好一段时间 public
  • Spring Security仅用于授权。外部认证

    正如标题所述 我正在开发一个 Web 应用程序 该应用程序从外部应用程序接收用户身份验证信息 我的应用程序的弹簧控制器获取用户信息并将其存储在会话中 我想在 Spring Security 中对这个用户进行身份验证 然后使用他的角色授予 拒
  • 获取作为输入文本字段的数据表单元格值

    我正在使用 javascript 数据源生成 DataTable 这data从对 nodejs 的 ajax 调用返回 该调用查询 SQL Server DB 表并返回 2 列 均为数值数据 我再添加 2 列来保存输入字段 默认值为 0 以
  • IP 本地化:映射 ip->location 随着时间的推移而固定?

    我正在管理一个网络平台 想要获取一些统计数据 了解我的用户来自哪里 我可以存储远程 IP 并且我知道有本地化服务可以将 IP 映射到地理位置 这个映射是如何完成的 是否有固定的表 哪个IP地址分配给哪个地区 我必须在访问时请求映射还是可以在
  • 如何禁用或忽略 Dependabot 拉取请求?

    我们希望使用 Dependabot 来了解更新的依赖项 但我们不希望 Dependabot 自行创建拉取请求 也不希望自动构建 我们使用 GitHub 进行代码 使用 Azure DevOps 进行构建 文档中没有明确的提示 https d
  • 生成密码重置密码

    我正在做一个允许用户重置密码的模块 我注意到大多数网站都提供了一个确认链接 其中包含具有唯一哈希值的查询字符串 我的问题是 每次同一用户请求忘记密码时 如何生成这个唯一的哈希值 我应该将此哈希存储在数据库中并稍后使用它进行验证吗 会安全吗
  • 在 SQL Server 中强制部分连接顺序

    Edit 人们很难理解我想要什么 这里有一些漂亮的图片 详细地解释了它 首次加入交易 to Strange 到目前为止的结果 Customer Invoice TransactionID Mass Length LeptonNumber I