【发布时间】:2013-10-07 21:40:48
【问题描述】:
UPDATE monthly_report_c a
LEFT JOIN
(
SELECT DATE_FORMAT((STR_TO_DATE(a.TRANSACTION_DATE,'%d.%m.%Y')), '%Y%m') mnt,
COUNT(DISTINCT a.CUSTOMER_ID) totalNum
FROM spendingtx a
WHERE a.CARD_PROGRAM = "visa"
AND CAST(a.AMOUNT AS DECIMAL(5,2)) > 0.01
GROUP BY DATE_FORMAT((STR_TO_DATE(a.TRANSACTION_DATE,'%d.%m.%Y')),'%Y%m')
) b ON b.mnt = a.Month_Number
.
.
.
SET a.visa = IFNULL(b.totalNum, 0)
上面的代码从spendingtx表中提取并更新另一个表,其中第一个字段为yearmonth(即201309 201310 ...等)
我收到此错误:
[Err] 1264 - 第 1 行的列“(null)”的值超出范围
【问题讨论】:
-
对于任何行来说都是 a.TRANSACTION_DATE NULL。当您尝试将 NULL 转换为数据时,它可能会引发该错误。另外,您使用的是什么 DBMS? MYSQL、ORACLE、MSSQL?
-
只是疯狂的想法,你使用了别名'a'两次。即使第二个在子查询中,也想知道是否会搞砸。
-
使用 MYSQL 在 TRANSACTION_DATE 中没有 NULL 值。