当我在表中插入一些记录时,我发现......
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
自动联合的地方读到了为什么会出现这些差异。
答案 0 :(得分:3)
问题是你的查询不同 - 你的第一个是UNION
而你的第二个没有 - 所以他们自然会插入不同数量的值。至于INSERT ALL
与直INSERT
的对比:
INSERT
可用于将新记录插入单个表。INSERT ALL
可用于根据查询条件将新记录插入多个表。所以你的假设如下所述:
我已经阅读了
INSERT ALL INTO
自动联合的地方 为什么会出现这些差异。
不正确。 INSERT ALL
与UNION
无任何关系。但话虽如此,你可能会混淆UNION ALL
as explained here。
SQL UNION ALL运算符用于组合2或的结果集 更多SELECT语句。它返回查询中的所有行(即使 该行存在于多个SELECT语句中。)
UNION ALL中的每个SELECT语句必须具有相同的编号 具有相似数据类型的结果集中的字段。