Sql 如何在单个insert语句中执行多重insert into..select查询?
我有一个多重插入到..select语句,如下所示。如果您看到,在所有三条语句中只有一个列值(Req\u Attrname)正在更改。其他所有内容都是相同的,包括Sql 如何在单个insert语句中执行多重insert into..select查询?,sql,oracle,oracle11g,sql-insert,Sql,Oracle,Oracle11g,Sql Insert,我有一个多重插入到..select语句,如下所示。如果您看到,在所有三条语句中只有一个列值(Req\u Attrname)正在更改。其他所有内容都是相同的,包括where条件 插入语句1) 插入语句2) 插入报表3) 我在这里尝试的是,如果select返回20行,首先我必须用Product Manager作为Req\u attrname的值插入这20行,然后我必须用Quality Manager插入相同的20行,然后再插入副工程师。为了实现这一点,我使用了3个insert语句。像这样,我有15到
where
条件
插入语句1)
插入语句2)
插入报表3)
我在这里尝试的是,如果select返回20行,首先我必须用
Product Manager
作为Req\u attrname的值插入这20行,然后我必须用Quality Manager
插入相同的20行,然后再插入副工程师
。为了实现这一点,我使用了3个insert语句。像这样,我有15到20条插入语句。有没有一种方法可以在单insert语句中实现这一点?它将帮助我减少代码并提高可读性。请提供另一种解决方案。由于Req\u Attrname
都是常量,您可以从dual
和cross-join
中查询所有常量,从而在原始查询中获得与每个Req\u Attrname
匹配的查询行:
INSERT INTO details (repo_phyid,
repo_type,
repo_attrname,
repo_attrvalue,
req_phyid,
req_type,
req_attrname,
req_attrvalue)
SELECT demo.phyid,
'Complementary Item',
'Product Management Responsible',
demo.attr_value,
tnr.phyid,
'Complementary Item',
req_attrname,
demo.attr_value
FROM repo_tnr tnr
JOIN repo_tnr_tttribute demo ON tnr.phyid = demo.phyid
CROSS JOIN (SELECT '**Product Manager**' AS req_attrname FROM dual
UNION ALL
SELECT '**Quality Manager**' AS req_attrname FROM dual
UNION ALL
SELECT '**Depty Engineer**' AS req_attrname FROM dual) t
WHERE demo.attr_name = 'Product Management Responsible' AND
tnr.type = 'Complementary Item'
谢谢,成功了我还有一个疑问。如果这些不是常量,我需要从一些表格中选择,该怎么办?因为我也有那些场景。请帮帮我,你可以直接查询那个表而不是
dual
。就这样?好的,我试试看。非常感谢……)
insert into details(repo_phyid,repo_type,repo_attrname,repo_Attrvalue,
Req_phyid,Req_type,Req_Attrname,Req_attrvalue)
select demo.phyid,'Complementary Item','Product Management Responsible',demo.attr_value,
tnr.phyid,'Complementary Item','**Quality Manager**',demo.attr_value
From repo_Tnr Tnr,repo_Tnr_Attribute demo
Where Tnr.Phyid=demo.Phyid
And demo.Attr_Name='Product Management Responsible'
and tnr.type='Complementary Item'
insert into details(repo_phyid,repo_type,repo_attrname,repo_Attrvalue
,Req_phyid,Req_type,Req_Attrname,Req_attrvalue)
select demo.phyid,'Complementary Item','Product Management Responsible',demo.attr_value
,tnr.phyid,'Complementary Item',**'Depty Engineer**',demo.attr_value
From repo_Tnr Tnr,repo_Tnr_Attribute demo
Where Tnr.Phyid=demo.Phyid
And demo.Attr_Name='Product Management Responsible'
and tnr.type='Complementary Item'
INSERT INTO details (repo_phyid,
repo_type,
repo_attrname,
repo_attrvalue,
req_phyid,
req_type,
req_attrname,
req_attrvalue)
SELECT demo.phyid,
'Complementary Item',
'Product Management Responsible',
demo.attr_value,
tnr.phyid,
'Complementary Item',
req_attrname,
demo.attr_value
FROM repo_tnr tnr
JOIN repo_tnr_tttribute demo ON tnr.phyid = demo.phyid
CROSS JOIN (SELECT '**Product Manager**' AS req_attrname FROM dual
UNION ALL
SELECT '**Quality Manager**' AS req_attrname FROM dual
UNION ALL
SELECT '**Depty Engineer**' AS req_attrname FROM dual) t
WHERE demo.attr_name = 'Product Management Responsible' AND
tnr.type = 'Complementary Item'