我有2个相同的表DATES和DATES_ARCHIVED
我想在DATES表中选择日期早于当前日期-88天的所有行,然后将这些行插入DATES_ARCHIVED。
我为此创建了一个CASE。
然后在插入后我想从原始DATES表中删除那些相同的行。
我确信我之前已经开始工作了,但它不再起作用了它一直在给出错误:
错误代码:1136。列数与第1行的值计数不匹配
所有表都有相同数量的列,我也删除了我在表上的2个触发器,但发生了同样的错误。
我很确定这是因为它结束了AS MostRecentDate的情况,我认为这是添加一个新列。
此外,如果我删除第一个下面的所有代码:从日期开始,我会得到相同的错误
以下是代码:
INSERT INTO dates_archived
(term, course_no, date1_end, date2_end, date3_end, date4_end)
SELECT
term, course_no, date1_end, date2_end, date3_end, date4_end,
CASE WHEN date1_end > date2_end THEN date1_end
WHEN date2_end > date1_end THEN date2_end
WHEN date3_end > date1_end THEN date3_end
WHEN date4_end > date1_end THEN date4_end
WHEN date1_end > date3_end THEN date1_end
WHEN date2_end > date3_end THEN date2_end
WHEN date3_end > date2_end THEN date3_end
WHEN date4_end > date2_end THEN date4_end
WHEN date1_end > date4_end THEN date1_end
WHEN date2_end > date4_end THEN date2_end
WHEN date3_end > date4_end THEN date3_end
WHEN date4_end > date3_end THEN date4_end
ELSE 0
END AS MostRecentDate
FROM dates
HAVING (MostRecentDate <= (SELECT CURDATE() - INTERVAL 88 DAY));
FROM dates
WHERE (date1_end OR date2_end OR date3_end OR date4_end = MostRecentDate);
DELETE FROM dates
WHERE (date1_end OR date2_end OR date3_end OR date4_end = MostRecentDate);
提前致谢, 克里斯
答案 0 :(得分:0)
使用CASE
,您在其中添加了一个名为MostRecentDate
的新行,因此行数与表行数不匹配(因为您只使用这些term, course_no, date1_end, date2_end, date3_end, date4_end
在插入中)。
如果您确实需要该字段MostRecentDate
,则必须将其添加到DATES_ARCHIVED
表中,以便行数相同,并且您的语句将完全正常。
如果您不需要在表中插入该行,只需从代码中删除CASE
语句,它就可以正常运行而不会给您带来任何错误。
同样在您的代码中,您在MostRecentDate
语句中使用DELETE
,但是在insert into语句完成后应删除该变量,因此代码将在那里中断。如果要在delete语句中使用它,还需要再次声明它。
我建议您创建一个变量,然后执行CASE
语句将值保存在其中,只需在HAVING
/ WHERE
和DELETE
中使用该变量,这样你就不必在SELECT
中拥有它,代码也不会在那里破解。