如何使用 Update in Case 语句和列作为别名

118 阅读1分钟

在MySQL中,可以使用UPDATE和CASE语句来更新表中的数据,并且可以使用列别名来引用列。以下是一个示例,展示如何在UPDATE语句中使用CASE和列别名:

假设有一个名为​​users​​的表,包含​​id​​、​​name​​和​​age​​列。

要根据条件更新​​age​​列,可以使用如下的UPDATE语句:

UPDATE users
SET age = CASE
    WHEN name = 'John' THEN 30
    WHEN name = 'Alice' THEN 25
    ELSE age
  END;

在这个例子中,当​​name​​等于'John'时,将​​age​​更新为30;当​​name​​等于'Alice'时,将​​age​​更新为25;否则,保持​​age​​不变。

如果要在UPDATE语句中使用列别名,可以使用内部查询或临时表来实现。以下是一个示例:

UPDATE users AS u
INNER JOIN (
  SELECT id, name, age AS new_age
  FROM users
) AS tmp ON u.id = tmp.id
SET u.age = CASE
    WHEN tmp.name = 'John' THEN tmp.new_age + 5
    WHEN tmp.name = 'Alice' THEN tmp.new_age - 5
    ELSE tmp.new_age
  END;

在这个例子中,我们使用内部查询来创建一个临时表​​tmp​​,将​​age​​列别名为​​new_age​​。然后,使用UPDATE语句和CASE语句根据条件更新主表​​users​​的​​age​​列。

需要注意的是,使用内部查询或临时表可能会对性能产生一些影响。在实际应用中,请根据数据规模和查询复杂性进行评估和测试。