以下设置(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)
我想你想要:
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
. 确保目标中不存在行