如何将一个表的结果与SQL查询中第一个表中不存在的另一个表的结果连接起来?

问题描述 投票:0回答:1

我有两个如下所示的示例表。

表A

日期 批次ID 产品名称 改变
5/10/24 1 PN1 1
5/10/24 1 PN2 2
5/10/24 2 PN1 2

表B

日期 批次ID 产品名称
5/10/24 1 PN1
5/10/24 1 PN2
5/10/24 1 PN3
5/10/24 2 PN1
5/10/24 2 PN2

我需要从表 A 中获取所有结果集,其中更改为 1 和 2,以及表 B 结果(其余产品名称)不在表 A 中,因为每个批次 ID 的更改为 0

表 A 和 B 的期望结果如下

日期 批次ID 产品名称 改变
5/10/24 1 PN1 1
5/10/24 1 PN2 2
5/10/24 2 PN1 2
5/10/24 1 PN3 0
5/10/24 2 PN2 0

我已经写了一个查询:

从表 A 中选择所有内容并更改 1 或 2 以及与第三个表的附加连接 联盟 表 B 的结果更改为 0(与第三个表的附加连接) 表 A 的结果在子查询中不存在

它以某种方式从表 B 中返回产品名称和 BatchId,而这些名称和 BatchId 已存在于表 A 中。

仅当表 B 中不存在值时,我才需要表 B 中的值。

如何以正确的方式查询? 请注意,没有唯一的 id 可用于代替 NOT IN,(BatchID,ProductName)组合是唯一的

我的查询是这样的(示例):

SELECT DISTINCT Date, BatchID, ProductName,Change from TableA JOIN Table3 ON TableA.Id =Table3.Id 其中(条件) UNION SELECT DISTINCT Date,BatchID, ProductName, 0 as Change From TableB Join Table3 ON TableB.Id=Table 3。 Id WHERE NOT EXISTS ( SELECT 1 from TABLEA where TableA.Id=Table3.Id AND (conditions))

sql
1个回答
0
投票

希望这有帮助 -

  • 您将需要使用 - UNION ALL 将这些结果与表 B 和表 A 中的行合并。
  • 如果您需要连接第三个表,请使用 LEFT OUTER JOIN 与上述
    UNION ALL
    查询。
© www.soinside.com 2019 - 2024. All rights reserved.