【发布时间】:2019-05-15 04:28:03
【问题描述】:
我有三个表,只有一个公共字段 [Asset]。
一个表 [tblAssets] 包含我想要的所有字段。
但是,我想检查其他两个表并添加任何未出现在第一个表中的 [Asset]。
这将导致新记录仅包含 [Asset],其余字段为空白。
我目前的代码如下:
SELECT *, "Assets" AS [Source]
FROM [tblAssets]
UNION SELECT "BOM", [Asset], NULL, NULL, NULL, NULL, NULL, NULL
FROM [tblBOM]
UNION SELECT "WO", [Asset], NULL, NULL, NULL, NULL, NULL, NULL
FROM [tblWO];
这会按预期添加记录,但不会删除重复项,因为整个记录不是重复项。
我怀疑还有其他方法可以解决这个问题,例如在某些条件下附加查询。
为了澄清,我想要显示在多个数据源中的所有 [Asset] 的完整列表,但只有 [Assets] 表中显示的其余字段。
样本数据:
tblAssets -
Asset Type Unit
P1 2 1
M1 1 2
tblBOM -
Comp Asset Qty
1 P1 1
2 P2 2
tblWO -
WO Asset Cost
1 P1 100
2 C1 200
电流输出
Source Asset Type Unit
Assets P1 2 1
Assets M1 1 2
BOM P1
BOM P2
WO P1
WO C1
期望的输出
Source Asset Type Unit
Assets P1 2 1
Assets M1 1 2
BOM P2
WO C1
【问题讨论】:
-
请提供样本数据和期望的结果。
-
@Gordon 已添加,谢谢
-
只需使用
where [Asset] not in (SELECT Asset from tblAssets)和其他 2 个表类似。 -
@xQbert 感谢您的回复,我刚刚尝试过,结果只从 tblAsset 中记录。我对 SQL 比较陌生,所以我可能弄错了语法或位置。为了澄清,我应该在“FROM [tblBOM]”和“FROM [tblWO]”之后输入您建议的代码?另外,如果 [Asset] 同时出现在 tblBOM 和 tblWO 中怎么办?在这种情况下,我不在乎 [Source] 中出现什么,只希望记录出现。
-
要输入的来源是哪一列,在 2 个联合的开头和资产的末尾都有。做不到。
标签: sql ms-access duplicates union