如何仅在没有主键或外键的表上插入新行?
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.
场景:我有两个 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.