如何仅在没有主键或外键的表上插入新行?

How to insert new rows only on tables without Primary or Foreign Keys?

场景:我有两个 table。 Table A 和 Table B,两者都具有完全相同的列。我的任务是创建一个大师table。我需要确保主 table 中没有重复项,除非它是新记录。

问题:构建 table 的人没有为 table 分配主键。

尝试:我尝试了 运行 一个 INSERT INTO WHERE NOT EXISTS 查询(以下示例不是我 运行 的实际查询)

问题:WHERE t2.id = t1.id 下面的查询部分让我感到困惑,我的 table 有很多列,没有像我说的那样没有 id 列它没有主键来锚定匹配,所以,在我只有没有主键的值的情况下,我怎样才能只追加新记录?另外,也许我正在以错误的方式解决这个问题,但是 TSQL 是否还有其他值得考虑的功能或选项?也许不是 INSERT INTO 语句或其他东西?我的 SQL 技能还没有那么先进,所以我不是在寻求解决方案,而是寻求想法或其他值得考虑的方法?欢迎任何想法。


INSERT INTO TABLE_2
  (id, name)
SELECT t1.id,
       t1.name
  FROM TABLE_1 t1
 WHERE NOT EXISTS(SELECT id
                    FROM TABLE_2 t2
                   WHERE t2.id = t1.id)

如果我正确理解你的问题,你需要通过将条件 t2.id = t1.id 更改为你拥有的任何列来修改你发布的 SQL 示例。

假设您的 2 table 有名称和品牌列并且您不想重复,只需将示例更改为:

哪里 t2.name = t1.name AND t2.brand = t1.brand

这将确保您不会在 table 2 和 table 1 中插入重复的行。您必须确保 where 条件包含所有列(您说 table 模式相同)。

此外,上面的代码示例将所有内容复制到 table 2 - 但你说你想要一个母版 table - 所以你必须更改它以插入母版 table,不是 table 2.