1

フィールドに基づいて、最近追加された行を除くすべてを削除するクエリを開発しました->テキストとして保存されているタイムスタンプ、およびユーザー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 )

削除したいすべてのデータを正しく取得します。

質問の形式を変更する必要はないと教えてください。午前中ずっとクエリに費やしてきたからです。:(

編集:

調査の結果、サブクエリで使用している同じテーブルから削除できないことがわかりました。だから私はこれのための長い回避策を作成することができます...後で更新されます...

4

1 に答える 1

-1
DELETE from `table` where COALESCE(STR_To_DATE( Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( Timestamp , '%a %b %d %H:%i:%s CST %Y' )) in
(
SELECT 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' ))
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)
)
于 2012-08-29T16:27:33.750 に答える