我有两个如下所示的示例表。
表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))
希望这有帮助 -
UNION ALL
查询。