sql 插入多行如果不存在一个值来自子查询

问题描述 投票:0回答:1

以下设置(SQLExpress/MS Sql Server 2005):

table tb1, columns keyX, value1
table tb2, columns keyX (FK), value2

我想在 tb2 中插入几行,用于 value2s 列表和相同的 keyX。 keyX 我应该退出像

这样的选择语句
select keyX from tb1 where tb1.value1 = 1234

编辑:上面的选择语句返回 1 行(keyX 和 value1 都是唯一的)

只有在不存在的情况下才应该插入。

无法使用此处和其他站点上找到的许多几乎/相似的解决方案。

最后尝试插入键值对,keyX为key,值为(1, 2, 3):

insert into tb2 (value2, keyX)
select t1.keyX from (select keyX from tb1 where value1 = 1234) as t1
values (1, t1.keyX), (2, t1.keyX), (3, t1.keyX)
where not exists (select * from tb2 as t2 where t2.keyX = t1.keyX and t2.value2 = t1.keyX)
sql subquery sql-insert
1个回答
1
投票

我想你想要:

insert into tb2 (keyX, value2)
select t1.keyX, v.value2 
from tb1 t1
cross join ( values (1), (2), (3) ) v(value2)
where t1.value1 = 1234 and not exists (
    select 1 from tb2 t2 where t2.keyX = t1.keyX and t2.value2 = v.value2
)

查询从

tb1
中选择
value1
,然后使用笛卡尔连接“乘以”行(行构造函数的语法 -
values
- 可能因您运行的数据库而异)。最后,我们使用
not exists
.

确保目标中不存在行
© www.soinside.com 2019 - 2024. All rights reserved.