2013-06-10 14 views
5

古いテーブル構造をアップグレードして最適化しています。 replace intoで正常に動作するために、2つの列にわたって新しい一意のキーに干渉する古いゾンビ項目を削除します。エラー#1093 - FROM句で更新対象テーブル 'relProductsPrices'を指定できません

問合せ:

DELETE from `relProductsPrices` where `ID` in 

    (SELECT scanA.ID from `relProductsPrices` as scanA 
      inner join `relProductsPrices` as scanB 

    where scanA.ID  < scanB.ID 
    and scanA.product = scanB.product 
    and scanA.priceName = scanB.priceName); 

エラー:

#1093 - You can't specify target table 'relProductsPrices' for update in FROM clause 

私はこの時点で、適切に1 MySQLのクエリにこれを取得するかどうかはわかりませんか?

私はこの質問が重複していないことを願っています。同様の適応可能なエントリを見つけることができなかったようです。このエラーに関する質問がありますが、私はここに更新クエリを全く持っていません。そして、ほとんどの人が(副次的な選択を作成する)解決策は既に私がすでに既に行っています。

ありがとうございます!

+2

ソリューションほとんどの人の状態は、副選択の別のレベルを持つことです。あなたは1つのレベルしか持っていません。 –

答えて

10

これを試してみてください:

DELETE FROM `relProductsPrices` 
WHERE `ID` IN ( 
    SELECT 
     tmp.ID 
    FROM (
     SELECT 
     scanA.ID 
     FROM 
     `relProductsPrices` as scanA 
     INNER JOIN `relProductsPrices` as scanB 
     ON scanA.ID  < scanB.ID 
     AND scanA.product = scanB.product 
     AND scanA.priceName = scanB.priceName 
    ) as tmp 
); 
+0

これの背後にあるロジックは私を本当に混乱させますが、正直なところ、それは魅力のように機能します。ありがとう、トン。 –

+1

Np、それはうまくいった:) @MartinSmithは、あなたがサブセレクトの別のレベルが必要であることをよく指摘していたので、 – Stephan

+0

そう、私は何とかそれを逃した。しかし、正直なところ...私は実際には、それが動作しても、私が試したものよりも論理的にどのようになっているのか分かりません。ありがとう –

関連する問題