2017-08-28 141 views
-2

我有2个相同的表日期和DATES_ARCHIVEDMYSQL插入+选择+案例+ DELETE不工作

我想在日期表中选择所有具有日期是比当前日期-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); 

由于提前, 克里斯

+1

您选择7列并插入6列 – Jens

+0

此外,您不能在where子句中的select子句中使用您定义的别名。 – fancyPants

+0

应如何你的delete语句了解MostRecentDate? – fancyPants

回答

0

随着你的CASE你在那里放了一个新的行,这就是所谓的MostRecentDate,所以行数与表行数不匹配(因为你只在插入中使用这些term, course_no, date1_end, date2_end, date3_end, date4_end)。

如果您确实需要该字段MostRecentDate,您必须将其添加到DATES_ARCHIVED表中,以便行计数相同,并且您的语句将工作得很好。

如果您不需要将该行插入表中,只需从代码中删除CASE语句,它应该可以工作而不会出现任何错误。

此外,在您的代码中,您在DELETE语句中使用MostRecentDate,但在插入语句完成后应该删除该变量,以便代码将在那里打破。如果你想在DELETE语句也使用它,你需要再次声明。

我建议你做一个变量,做CASE语句来保存它里面的价值,只是用你的HAVING/WHEREDELETE内部的变量,所以这样你就不必把它在SELECT而且代码也不会在那里破坏。

+0

是我加MostRecentDate以及在dates_archived,并将其添加的行,但它不会从日期删除它们。我将回答上面关于删除部分的评论。 – PAPADOC

+0

我刚刚编辑了删除的答案。希望我设法帮助你,祝你有美好的一天。 – MirzaS

+0

我会检查谢谢 – PAPADOC