SQL 当数据集来自 select 查询时不存在时插入

SQL Insert when not exist where dataset is from select query

我正在尝试执行以下查询

INSERT INTO MyTable(Column1, Column2)
SELECT Column1Value, 'Temp'   -- This will return multiple values which are to be inserted.
FROM Table2 t2
    INNER JOIN Table3 t3 ON t2.Column1 = t3.Column1
    ...
    Few more joins
    ...
WHERE t2.Column3 = 0

正如您在插入查询中看到的,数据行来自另一个查询。 (这就是为什么我不能在这里使用 WHERE != something 的原因) 我能够 运行 这个查询,但问题是当已经存在很少的记录时,这将抛出异常。所以我需要确保只对那些不存在的记录执行这个查询。

有人可以帮忙吗?

谢谢和问候,

象头神。

添加条件如何:

where not exists (select 1
                  from mytable t
                  where t.column1 = column1value and t.column2 = 'temp'
                 )

这假设两列一起构成唯一键或主键。

也有可能是您的 select 返回了重复的值,这是导致问题的原因。因此,您也可以将 select 更改为 select distinct:

INSERT INTO MyTable(Column1, Column2)
    SELECT DISTINCT Column1Value, 'Temp'
    FROM Table2 t2
        INNER JOIN Table3 t3 ON t2.Column1 = t3.Column1
        ...
        Few more joins
        ...
    WHERE t2.Column3 = 0 AND
          NOT EXISTS (select 1
                      from mytable t
                      where t.column1 = column1value and t.column2 = 'temp'
                     );

你可以这样做:

INSERT INTO MyTable(Column1, Column2)
SELECT Column1Value, 'Temp'
FROM Table2 t2
    INNER JOIN Table3 t3 ON t2.Column1 = t3.Column1
    ...
    Few more joins
    ...
WHERE t2.Column3 = 0
AND 
NOT EXISTS (SELECT Column1 FROM MyTable MT WHERE MT.col1 = t2.col1);