更新同一行中的数据

时间:2017-12-19 19:38:26

标签: mysql sql

让问题变得有效。 我有一个名为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_idT002的列费用更新为trip_idT001的费用。

我尝试了这个查询:

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

查询影响了3行,但它将所有T002成本更新为0。 如何使用最少的查询解决此问题?

1 个答案:

答案 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分配。