我有 2 个相同的表 日期 和 DATES_ARCHIVED
我想在 DATES 表中选择日期早于当前日期 -88 天的所有行,然后将这些行插入到DATES_ARCHIVED中。
我为此创建了一个案例。
然后在插入后,我想从原始 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);
提前感谢, 克里斯
使用您的CASE
,您将在其中放置了一个名为MostRecentDate
的新行,因此行数与表行数不匹配(因为您只在插入中使用这些term, course_no, date1_end, date2_end, date3_end, date4_end
(。
如果您确实需要该字段MostRecentDate
则必须将其添加到DATES_ARCHIVED
表中,以便行数相同,并且您的语句将正常工作。
如果您不需要将该行插入到表中,只需从代码中删除CASE
语句,它应该可以工作而不会给您任何错误。
同样在您的代码中,您在语句中使用MostRecentDate
DELETE
但应在插入语句完成后删除该变量,因此代码将在那里中断。如果要在 delete 语句中使用它,还需要再次声明它。
我建议您创建一个变量并执行CASE
语句以将值保存在其中,并在您的HAVING
/WHERE
和DELETE
中使用该变量,这样您就不必将其放在SELECT
中,代码也不会在那里中断。