我有两个表A和B,结构完全相同。我需要验证A是B的子集。由于结构包含100多个字段,因此我不想在where谓词中逐一列出。
我想知道是否还有更简便的方法
答案 0 :(得分:4)
假设:
(1)与A
和B
相同的表结构。这意味着列的顺序及其数据类型必须匹配。
(2)表A
问题描述
要证明A is a subset of B
,您需要显示A\B = empty set
。
解决方案
这意味着如果删除A
中的每一行,并且B
中具有匹配行,并且输出为空(0行),则表示A is subset of B
。
另一方面,如果在输出中获得> 0
行,则意味着A
包含B
没有的行和A isn't a subset of B
的行。
SELECT * FROM A
EXCEPT
SELECT * FROM B
当A
为空(包含0行)时,它将被视为B
的子集,因为上述查询的结果将为0行。
答案 1 :(得分:-1)
@robertoplancarte的方法稍加调整
with tB_cnt as
(
SELECT COUNT(*) cnt FROM
(
SELECT DISTINCT * FROM dbo.T_B
) T_B
), TAB_cnt as
(
SELECT count(*) cnt FROM
(
SELECT * FROM dto.T_B
UNION
SELECT * FROM dto.T_A
) T_AB
)
SELECT
CASE WHEN TB_CNT.CNT = TAB_CNT.CNT THEN
'Table A is subset of B'
else
'Table A is not subset of B'
END as Result
FROM TAB_CNT, TB_CNT