INSERT INTO和INSERT ALL INTO之间的区别

时间:2014-06-01 03:14:15

标签: sql oracle

当我在表中插入一些记录时,我发现......

INSERT INTO T_CANDYBAR_DATA   
  SELECT CONSUMER_ID,CANDYBAR_NAME,SURVEY_YEAR,GENDER,1 AS STAT_TYPE,OVERALL_RATING 
  FROM CANDYBAR_CONSUMPTION_DATA
  UNION
  SELECT CONSUMER_ID,CANDYBAR_NAME,SURVEY_YEAR,GENDER,2 AS STAT_TYPE,NUMBER_BARS_CONSUMED 
  FROM CANDYBAR_CONSUMPTION_DATA;

79 rows inserted.

INSERT ALL
INTO t_candybar_data VALUES (consumer_id,candybar_name,survey_year,gender,1,overall_rating)
INTO t_candybar_data VALUES (consumer_id,candybar_name,survey_year,gender,2,number_bars_consumed)
SELECT  * FROM candybar_consumption_data

86 rows inserted.

我已经在INSERT ALL INTO自动联合的地​​方读到了为什么会出现这些差异。

1 个答案:

答案 0 :(得分:3)

问题是你的查询不同 - 你的第一个是UNION而你的第二个没有 - 所以他们自然会插入不同数量的值。至于INSERT ALL与直INSERT的对比:

  • INSERT可用于将新记录插入单个表。
  • INSERT ALL可用于根据查询条件将新记录插入多个表。

所以你的假设如下所述:

  

我已经阅读了INSERT ALL INTO自动联合的地​​方   为什么会出现这些差异。

不正确。 INSERT ALLUNION无任何关系。但话虽如此,你可能会混淆UNION ALL as explained here

  

SQL UNION ALL运算符用于组合2或的结果集   更多SELECT语句。它返回查询中的所有行(即使   该行存在于多个SELECT语句中。)

     

UNION ALL中的每个SELECT语句必须具有相同的编号   具有相似数据类型的结果集中的字段。