Sql 如何在单个insert语句中执行多重insert into..select查询?

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到

我有一个多重插入到..select语句,如下所示。如果您看到,在所有三条语句中只有一个列值(Req\u Attrname)正在更改。其他所有内容都是相同的,包括
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'