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);
我正在尝试执行以下查询
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);