让问题变得有效。 我有一个名为trip_cost的表
__________________________________
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_id
为T002
的列费用更新为trip_id
为T001
的费用。
我尝试了这个查询:
UPDATE trip_cost
SET cost= (SELECT cost WHERE trip_id = 'T001')
WHERE trip_id = 'T002'
查询影响了3行,但它将所有T002成本更新为0。 如何使用最少的查询解决此问题?
答案 0 :(得分:0)
您正在尝试使用相关子查询:
UPDATE trip_cost
SET cost= (SELECT cost FROM trip_cost WHERE trip_id = 'T001')
WHERE trip_id = 'T002';
这在MySQL中不起作用,因为你不能在子查询中引用正在更新的表(就像那样)。至少这个查询正确地表达了逻辑。
相反,请使用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
分配。