【发布时间】:2017-08-28 08:41:52
【问题描述】:
我有 2 个相同的表 DATES 和 DATES_ARCHIVED
我想在 DATES 表中选择所有日期早于当前日期 -88 天的行,然后将这些行插入 DATES_ARCHIVED。
我为此创建了一个 CASE。
然后在插入之后,我想从原始 DATES 表中删除这些相同的行。
我确定我以前可以使用它,但是它不再起作用了,它一直报错:
错误代码:1136。列计数与第 1 行的值计数不匹配
所有表都有相同数量的列,我还删除了表上的 2 个触发器,但发生了同样的错误。
我很确定这是因为它以 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);
提前致谢, 克里斯
【问题讨论】:
-
您选择 7 列并插入到 6 列中
-
另外你不能在 where 子句中使用你在 select 子句中定义的别名。
-
你的删除语句应该如何知道 MostRecentDate?
-
我猜 CASE 语句不起作用。你应该写
WHEN date1_end >= date2_end AND date1_end >= date3_end AND date1_end >= date4_end THEN date1_end -
好的,所以删除语句必须在另一个查询中?
标签: mysql insert case having insert-into