Sql 查询与 return 存在于一个 table 中且不存在于另一个 table 中的零件号与其他字段数据

Sql query with join to return a part number that exists in one table and does not exist in another table with other field data

我正在尝试 return 来自一个 table A 的数据,但 table B 中不存在某些数据。例如:

Table A     No_         Inventory Posting Group
             1           PAR
             2           NEW
             3           PAR
             4           PAR

Table B     No_         Table ID       Dimension Code
             1           27             Branch
             2           27             Manufacturer
             3           27             Department
             3           27             Branch
             5           27             Department

table A 中存在每个 No_ 零件。Table B 需要在单独的行中同时包含 "Branch" 和 "Department"。有些部分在 Table B 中有一个或另一个或两个。我正在尝试 return 结果显示 table A 中列出的每个部分哪些不存在 "Branch" 和 "Department" in table B. 它可能是两个单独的查询。这是我现在拥有的,但我没有得到我想要的。

select dd.[No_], dd.[Table ID], dd.[Dimension Code], dd.[Dimension Value Code], dd.[Value Posting], dd.[Multi Selection Action]
from [Item] i left outer join [Default Dimension] dd

on  i.[No_] = dd.[No_]

where dd.[Dimension Code] not in ('BRANCH', 'DEPARTMENT')
and i.[Inventory Posting Group] = 'PAR'
and dd.[Table ID] = 27

试试这个:

SELECT dd.[No_]
FROM [Item] i
LEFT OUTER JOIN [Default Dimension] dd ON  i.[No_] = dd.[No_]
WHERE i.[Inventory Posting Group] = 'PAR'
  AND dd.[No_] IS NULL

想法是,当您左连接 table 时,右侧 table 缺失的匹配记录将具有 NULL 个值。

EDIT 要获取没有特定 Dimension Code 的记录,您需要加入具有维度列表的 table .如果你没有这样的 table,你可以在子查询中创建一个假的:

SELECT i.[No_], d.Dimension AS Missing_Dimension
FROM [Item] i
CROSS JOIN (SELECT 'DEPARTMENT' AS Dimension
            UNION
            SELECT 'BRANCH' AS Dimension) AS d
LEFT OUTER JOIN [Default Dimension] dd ON i.[No_] = dd.[No_]
            AND dd.[Dimension Code] = d.Dimension
WHERE i.[Inventory Posting Group] = 'PAR'
  AND dd.[No_] IS NULL
ORDER BY i.[No_]

这里是fiddle.