【发布时间】:2016-06-11 15:34:13
【问题描述】:
我正在使用 MySQL Workbench 5.7
我创建了下表并存储了过程:
DROP TABLE MV_SALESBYMONTH;
CREATE TABLE MV_SALESBYMONTH
(
`time_year` int, `time_month` int, `prod_code` int,`sale_units` int, `sale_price` int);
DELIMITER $$
CREATE procedure `REFRESH_MV_SALESBYMONTH` () BEGIN
TRUNCATE TABLE `MV_SALESBYMONTH`;
INSERT INTO MV_SALESBYMONTH
(SELECT TIME_YEAR AS 'YEAR', TIME_MONTH AS 'MONTH', PROD_CODE AS 'PRODUCT',
SUM(SALE_UNITS) AS 'UNITS SOLD', SUM(SALE_UNITS*SALE_PRICE) AS 'SALES TOTAL'
FROM TIME T, SALES S
WHERE S.TIME_ID = T.TIME_ID
GROUP BY TIME_YEAR, TIME_MONTH, PROD_CODE);
END $$
DELIMITER ;
第 5 步:使用实体化视图
CALL REFRESH_MV_SALESBYMONTH();
SELECT * FROM MV_SALESBYMONTH;
当我尝试运行语句时:
CALL REFRESH_MV_SALESBYMONTH();
我收到错误 1265:第 7 行的列“prod_code”的数据被截断
【问题讨论】:
-
sales.prod_code 列的数据类型是什么?
-
看表:MV_SALESBYMONTH:prod_code是一个整数。创建表 MV_SALESBYMONTH (
time_yearint,time_monthint,prod_codeint,sale_unitsint,sale_priceint); -
PROD_CODE和TIME T, SALES S是什么类型? (使用表别名使查询更具可读性。) -
我收到了这个 SELECT 语句,我必须从中创建我在上面发布的程序:SELECT TIME_YEAR AS "YEAR", TIME_MONTH AS "MONTH", PROD_CODE AS "PRODUCT", SUM(SALE_UNITS) AS “UNITS SOLD”,SUM(SALE_UNITS*SALE_PRICE) 作为“SALES TOTAL”从时间 T,SALES S WHERE S.TIME_ID = T.TIME_ID GROUP BY TIME_YEAR、TIME_MONTH、PROD_CODE;
-
该 select 语句正在查看一个名为 sales 的表。这就是数据的来源,它来自哪里。检查该表以检查数据类型。当我们要求提供不存在的缺失信息时,为什么要重复您已在原始问题中发布的信息?