我有以下选择查询:
select productid from product where productid not in (select productid from userproduct)
给出了以下输出:
1
2
3
4
现在,我有另一个表userproduct,其中包含以下列:
userid
productid
updatetime
author
我想通过sql创建以下insert语句:
insert into userproduct values(100,1,getdate(),'abc');
insert into userproduct values(100,2,getdate(),'abc');
insert into userproduct values(100,3,getdate(),'abc');
insert into userproduct values(100,4,getdate(),'abc');
insert into userproduct values(200,1,getdate(),'abc');
insert into userproduct values(200,2,getdate(),'abc');
insert into userproduct values(200,3,getdate(),'abc');
insert into userproduct values(200,4,getdate(),'abc');
仅出于演示目的,我使用了4个值。但实际上,我会得到数百个价值观。我无法为所有这些创建插入语句。 有没有办法自动创建insert语句?
答案 0 :(得分:1)
如果100& 200只是两个不同的用户ID,'abc'总是作者值,然后是
insert into userproduct (userid,productid,updatetime,author)
select 100,productid,getdate(),'abc' from product where productid not in (select productid from userproduct)
Union
select 200,productid,getdate(),'abc' from product where productid not in(select productid from userproduct)
答案 1 :(得分:1)
使用insert select语句。将结果与用户表交叉加入。
insert into userproduct (userid, productid, updatetime, author)
select u.userid, p.productid, getdate(), 'abc'
from product p
cross join users u
where p.productid not in (select productid from userproduct) ;
(您当然可以添加添加条件以将其限制为特定用户,例如and u.userid in (100,200)
。)
(如果您因某些原因不想访问用户表,请将cross join users u
替换为cross join (select 100 as userid union all select 200) u
。)
答案 2 :(得分:1)
尝试:如果您要限制userid
要插入并且未在表格中维护。您可以将CROSS JOIN
与静态userid
一起使用,如果需要,您可以添加更多内容:
INSERT INTO userproduct (userid,productid,updatetime,author)
SELECT x.userid, p.productid, getdate(),'abc'
FROM product p
CROSS JOIN (SELECT userid FROM (values(100),(200)) x (userid)) x
WHERE productid NOT IN(SELECT productid FROM userproduct)
如果在任何表格中维护用户,我们可以在tablename
中使用CROSS JOIN
。