フィールドに基づいて、最近追加された行を除くすべてを削除するクエリを開発しました->テキストとして保存されているタイムスタンプ、およびユーザーIDフィールド。
また、日付形式の変更も含まれるため、一部の合体も含まれます。
これが削除クエリです->
DELETE
FROM `table` main
WHERE COALESCE(STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CST %Y' )) <
(SELECT MAX(COALESCE(STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CST %Y' )))
FROM `table` sub
WHERE sub.Retrieving_User = main.Retrieving_User )
これは実行されず、このエラーがスローされます->
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'main WHERE COALESCE(STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ),' at line 2
これが何であるかは理解していますが、なぜそれが起こっているのかはわかりません。クエリを選択に変更すると->
SELECT *
FROM `table` main
WHERE COALESCE(STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CST %Y' )) <
(SELECT MAX(COALESCE(STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CST %Y' )))
FROM `table` sub
WHERE sub.Retrieving_User = main.Retrieving_User )
削除したいすべてのデータを正しく取得します。
質問の形式を変更する必要はないと教えてください。午前中ずっとクエリに費やしてきたからです。:(
編集:
調査の結果、サブクエリで使用している同じテーブルから削除できないことがわかりました。だから私はこれのための長い回避策を作成することができます...後で更新されます...