SQL查询 - 确保()中的每个值都存在一行

Nix*_*Nix 5 sql t-sql sql-server sql-server-2008

目前正在努力寻找一种方法来验证2个表(有效地为表A提供大量行)

我有两张桌子

表A.

 ID 
 A
 B 
 C
Run Code Online (Sandbox Code Playgroud)

表匹配

ID Number
A   1
A   2
A   9
B   1
B   9
C   2
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个SQL Server查询,基本上检查以确保表A中的每个值都存在一个变量值集的行(1,2,9)

上面的示例是不正确的,因为对于A中的每个记录,t应该具有匹配的每个值(1,2,9)的表中的相应记录.最终目标是:

表匹配

ID Number
A   1
A   2
A   9
B   1
B   2
B   9
C   1
C   2
C   9
Run Code Online (Sandbox Code Playgroud)

我知道它令人困惑,但一般来说,对于每个X in(某些集合),表格中应该有相应的记录匹配.我显然简化了一些事情.

如果您需要澄清,请告诉我.

OMG*_*ies 13

使用:

  SELECT a.id
    FROM TABLE_A a
    JOIN TABLE_B b ON b.id = a.id
   WHERE b.number IN (1, 2, 9)
GROUP BY a.id
  HAVING COUNT(DISTINCT b.number) = 3
Run Code Online (Sandbox Code Playgroud)

COUNT中的DISTINCT确保将重复项(IE:A在TABLE_B中具有值为"2"的两个记录)错误地视为正确记录.如果是,它可以省略number列具有唯一或主键约束,则它.

HAVING COUNT(...) 必须等于在提供值的数量IN子句.