验证一个表是另一个表的子集的有效方法

Yan*_*g L 2 sql

我有两个表 A 和 B,结构完全相同。我需要验证 A 是 B 的子集。因为结构包含 100 多个字段,我不想在 where 谓词中一一列出它们。

我想知道是否有更简单的方法来做到这一点

Kam*_*ski 5

假设

(1)A和 的表结构相同B。这意味着列的顺序及其数据类型都必须匹配。

(2)表中没有重复的行A

问题描述

为了证明A is a subset of B你需要证明这一点A\B = empty set

解决方案

这意味着,如果您删除A其中具有匹配行的每一行B并且您的输出为空(0 行),则这意味着A is subset of B.

另一方面,如果在输出中你得到> 0行,这意味着AB没有的行和A isn't a subset of B.

SELECT * FROM A
EXCEPT
SELECT * FROM B
Run Code Online (Sandbox Code Playgroud)

A为空(包含 0 行)时,它将被视为 的子集B,因为上述查询的结果将为 0 行。

  • 如果我们谈论集合论,那么不允许重复,但事实上,你是对的,如果表允许数据重复,这可能就是问题。我将把它作为一个假设。对于这种情况,我们需要一段更复杂的代码。好点子! (2认同)