更新同一行中的数据

问题描述 投票:-1回答:1

得到这个工作有问题。我有一个名为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.如何使用最少的查询解决此问题?

mysql sql
1个回答
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任务。

© www.soinside.com 2019 - 2024. All rights reserved.