2017-11-13 15 views
0

は私がこのselect文を使用して検出されたすべてのレコードのフィールドfupを更新したい私のMySQLデータベースで:UPDATEクエリとサブクエリを結合する方法は?

SELECT ic.hash 
FROM incompany as ic, app 
WHERE ic.id = app.ic_id; 

だから私は、次の複合クエリー作成:

UPDATE incompany 
SET fup = 'x' 
WHERE hash IN (SELECT ic.hash 
FROM incompany as ic, app 
WHERE ic.id = app.ic_id); 

をしかし、このクエリができます私は次のエラー:

You can't specify target table 'incompany' for update in FROM clause

誰も私はこの仕事をすることができますか?すべてのヒントは大歓迎です!

+1

おそらく重複の:私は正しく、論理に従っている場合https://stackoverflow.com/questions/4429319/you-cant-specify-target-table-for-update-in-from-clause# 14302701 – hage

答えて

2

2つの列に条件が欲しいと思われるので、これはちょっと難しいです。

UPDATE incompany ic JOIN 
     (SELECT DISTINCT ic.hash 
     FROM incompany ic JOIN 
      app 
      ON ic.id = app.ic_id 
     ) ica 
     ON ica.hash = ic.hash 
    SET fup = 'x' ; 
1

サブクエリーは必要ありません。 INNER JOINを使用してincompanyテーブルをappテーブルに、また別のエイリアスをincompanyテーブルにリンクする基準を設定できます。

UPDATE incompany I 
INNER JOIN app A ON I.id = A.ic_id 
INNER JOIN incompany I2 ON I.hash = I2.hash 
SET I.fup = 'x' 
関連する問題