gpt4 book ai didi

sql-server - 当连接依赖于第三个表中的数据时如何在 MSSQL 中反连接

转载 作者:行者123 更新时间:2023-12-02 03:06:40 25 4
gpt4 key购买 nike

这是我的情况。

PayTable
+-------+------+--------------+
| Craft | Job | sequence |
+-------+------+--------------+
| 400 | 1 | 1 |
+-------+------+--------------+
| 401 | 2 | 2 |
+-------+------+--------------+
| 5501 | 2 | 3 |
+-------+------+--------------+

Jobs
+-------+------+------+
| Job | CraftTemplate |
+-------+------+------+
| 1 | 1 |
+-------+------+------+
| 2 | 1 |
+-------+------+------+


Pay Template
+-------+--+
| Template |
+-------+--+
| 1 |
+-------+--+

PayCraftTemplate
+-------+------+---------+
| PayTemplate | Craft |
+-------+------+---------+
| 1 | 400 |
+-------+------+---------+
| 1 | 401 |
+-------+------+---------+

我需要做的是从 PayTable 中找到 PayCraftTemplate 中不存在该工艺的所有工艺。作为一种反连接模式,这看起来非常简单,但我似乎无法让数据适本地返回。

加入链接是:
PayTable INNER JOIN Jobs by Job -> Job
Jobs LEFT OUTER JOIN Pay Template by CraftTemplate -> Template
Pay Template LEFT OUTER JOIN by Template -> PayTemplate

这是我目前的尝试:
select
*
FROM
PayTable
WHERE NOT EXISTS (
SELECT 1
FROM
Jobs
LEFT OUTER JOIN PayTemplate
ON PayTemplate.Template = Jobs.CraftTemplate
LEFT OUTER JOIN PayCraftTemplate
ON PayCraftTemplate.Template = PayTemplate.Template
WHERE
PayTable.Craft = PayCraftTemplate.Craft AND PayTable.Job = Jobs.Job
) AND PayTable.Job IS NOT NULL AND PayTable.Craft IS NOT NULL

这不是返回我期望的数据,我希望 PayTable 的第 3 行只返回而不是我得到第 1,2 行

最佳答案

我猜你移动了一些东西来发布问题并基本上修复了它。从上面的查询中,您只需要更改 PayCraftTemplate.TemplatePayCraftTemplate.PayTemplate
起初我以为这是 left join 的问题与 where无意中把它变成了 inner join ,但在这种情况下 inner join无论如何都是需要的,所以这不是问题。

select    *
from PayTable
where not exists (
select 1
from Jobs
inner join PayTemplate
on PayTemplate.Template = Jobs.CraftTemplate
and Jobs.Job = PayTable.Job
inner join PayCraftTemplate
on PayCraftTemplate.PayTemplate = PayTemplate.Template
and PayCraftTemplate.Craft = PayTable.Craft
)
and PayTable.Job is not null
and PayTable.Craft is not null

结果:
+-------+-----+----------+
| Craft | Job | sequence |
+-------+-----+----------+
| 5501 | 2 | 3 |
+-------+-----+----------+

关于sql-server - 当连接依赖于第三个表中的数据时如何在 MSSQL 中反连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42299667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com