SQL Server 检查其他表中是否不存在组合主键

qhhrdooz  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(149)

我用的是sql server,目前有2张表,我想检查一下表1的复合主键是否没有包含在表2中。
我试过用这个,可惜在sql server中不起作用。在这种情况下,PK由id1和id2组成。

SELECT * FROM TABLE_1 WHERE (id1, id2) NOT IN (SELECT id1, id2 FROM TABLE_2)

我也见过更复杂的解决方案,但是,由于我试图生成这些查询作为python程序的一部分,我希望有一个简单的解决方案,如上面的1行。

v1l68za4

v1l68za41#

我会使用EXISTS()检查...

SELECT
  table_1.*
FROM
  table_1
WHERE
  NOT EXISTS (
    SELECT *
      FROM table_2
     WHERE table_2.id1 = table_1.id1
       AND table_2.id2 = table_1.id2
  )

就单行查询而言,我不推荐单行查询。原则上,代码应该是长而窄的,而不是短而宽的,列引用应该总是被限定的 (比如表名或别名)...
例如,你的非工作查询可能是这样布局的,并且突然看起来并不比基于NOT EXISTS()的查询短 (同时也明显更易于维护,对diff工具更友好,比如git等)

SELECT
  table_1.*
FROM
  table_1
WHERE
  (
    table_1.id1,
    table_1.id2
  )
  NOT IN
  (
    SELECT
      table_2.id1,
      table_2.id2
    FROM
      table_2
  )

我也从Python * 生成SQL(无论是通过ORM还是我自己的抽象层)*,生成简洁的查询并不比“简短的单行查询”难。

相关问题