mysql - 在给定条件下连接 2 列

标签 mysql

我遇到以下情况:我有一个表,可以说X,其中字段为

 -------------------------
 | City      | Country   |
 ------------------------|
 | Melbourne | Australia |
 | Phoenix   | USA       |
 | Manchester| USA       |
 | Manchester| UK        |
 | Phoenix   | USA       |
 | Pune      | India     |
 ------------------------

仅当city相同且country不同时,我才尝试更新city列。我尝试过这样做

UPDATE X SET (City) = CONCAT(CITY,COUNTRY) WHERE = ?

where 子句应该是什么?

编辑:

输出应该类似于

 ------------------------------
 | City           | Country   |
 -----------------------------|
 | Melbourne      | Australia |
 | Phoenix        | USA       |
 | Manchester, USA| USA       |
 | Manchester, UK | UK        |
 | Phoenix        | USA       |
 | Pune           | India     |
 ------------------------------

最佳答案

UPDATE X inner join X X_1 on X.city = X_1.city
SET X.City=CONCAT(X.city, ', ', X.Country)
WHERE X.country <> X_1.country

仅当多个国家/地区存在相同的城市名称时,才会将城市名称设置为 CONCAT(X.city, ', ', X.Country)

编辑:我想我更喜欢这个其他版本:

UPDATE
  X inner join
  (select city from X group by city having count(*)>1) X_dup
  on X.city = X_dup.city
SET X.City=CONCAT(X.city, ', ', X.Country)

我使用所有这些奇怪的连接,因为如果您在子查询中引用表,MySql 不允许您更新它。

关于mysql - 在给定条件下连接 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398365/

相关文章:

php - 处理Heroku/ClearDB自增主键策略

php - 与日期相关的 SQL 查询

如果不存在或者值等于0则mysql左连接

php - 我应该在 session 中存储用户数据吗?

SQL SELECT 获取前N个正整数

MySQL 准备语句 - 使用 WHERE 语句进行重复键更新

mysql double 触发两个一起更新

mysql - 如何使用scala获取事务中的第一条记录?

java - 优化数据库查询

mysql - 选择具有特定值的行之后的行