2017-12-19 12 views
-1

これは問題を起こしました。 は私がtrip_idtrip_idT001ここでコストにT002ある列のコストを更新したい同じ行のデータを更新

__________________________________ 
trip_id | account | details| cost| 
---------------------------------- 
T001 |trip  |train |30 | 
T001 |stay  |hotel |50 | 
T001 |food  |lunch |20 | 
T002 |trip  |train |40 | 
T002 |stay  |hotel |20 | 
T002 |food  |lunch |50 | 
---------------------------------- 

trip_costという名前のテーブルを持っています。

私はこのクエリを試してみました:

UPDATE trip_cost 
SET cost= (SELECT cost WHERE trip_id = 'T001') 
WHERE trip_id = 'T002' 

クエリが3行に影響を与えたが、それは0 にすべてT002コストを更新どのように私は最低限のクエリでこの問題を解決することができますか?

+1

あなたはT002の更新について話していますが、あなたの所在地はT004 – Fleury26

+2

です。1.あなたは2項には欠けています。 3.外部クエリでサブクエリをラップする必要があります。 – isaace

+0

@ Fleury26私の悪い、それを編集しました。私はすべてのコストをT001コストに変更したいと思います。しかし、私はそれを動作させることはできません。 –

答えて

0

あなたは相関サブクエリのためにしようとしている:あなたは(そのような)サブクエリで更新されたテーブルを参照することはできませんので、MySQLでは動作しません

UPDATE trip_cost 
    SET cost= (SELECT cost FROM trip_cost WHERE trip_id = 'T001') 
WHERE trip_id = 'T002'; 

。少なくともこのクエリはロジックを正しく表しています。

代わりに、使用join

UPDATE trip_cost tc JOIN 
     trip_cost tc1 
     ON tc1.trip_id = 'T001' 
    SET tc.cost= tc1.cost 
WHERE tc.trip_id = 'T002'; 

しないのはなぜ最初の仕事?さて、それは次のものと同等です:

UPDATE trip_cost tc 
    SET tc.cost= (SELECT tc.cost WHERE tc.trip_id = 'T001') 
WHERE tc.trip_id = 'T002'; 

つまり、参照はすべて外部クエリです。 trip_idは値'T002'を持つ必要があるため、値'T001'を持つこともできません。したがって、NULL割り当て。

関連する問題