2017-08-28 2 views
-2

作業とDATES_ARCHIVEDMYSQLは、私がDATESテーブルに現在の日付よりも古い日付を持つすべての行-88日を選択したい+ CASE +は、私は2つの同じテーブルDATESを持って

ない[削除]を選択します+に挿入しますそれらの行を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

あなたの削除ステートメントはMostRecentDateについてどのように知っていますか? – fancyPants

答えて

0

付きCASEMostRecentDateという名前の新しい行をそこに置くと、ローの数はテーブルの行の数と一致しません(挿入にはterm, course_no, date1_end, date2_end, date3_end, date4_endしか使われていないため)。

実際にそのフィールドがMostRecentDateの場合は、DATES_ARCHIVEDテーブルに追加する必要があるので、行数が同じであり、ステートメントは完全に正常に機能します。

テーブルにその行を挿入する必要がない場合は、コードからCASEステートメントを削除するだけでエラーが発生することはありません。

また、DELETEステートメントにMostRecentDateステートメントが使用されていますが、insert intoステートメントが終了した後にその変数を削除する必要があります。 deleteステートメントでそれを使用したい場合は、再度宣言する必要があります。

私はあなたが変数を作る示唆し、その中に値を保存し、ちょうどその方法は、あなたがSELECTでそれを持ってする必要はありませんので、ごHAVING/WHEREDELETE内でその変数を使用するようにCASEの文にしてくださいコードはそこで壊れません。

+0

はいMostRecentDateもdates_archivedに追加して行を追加しますが、日付からは削除されません。上記の削除部分のコメントにお答えします。 – PAPADOC

+0

私はちょうど削除の答えを編集しました。私はあなたを助けてくれることを願っています。 – MirzaS

+0

ありがとうございます – PAPADOC

関連する問題