MySQL:根据另一行更新多行的列

时间:2015-09-11 21:10:39

标签: mysql database

我有一个包含以下列的推文数据库

similarity(W, V) > 0.7

数据库包含每个不同+------------------------+--------------+ | Field | Type | +------------------------+--------------+ | id | varchar(128) | | message_id | bigint(20) | | message | text | | from_id | int(12) | | cnty | int(5) | | county | varchar(64) | | city | varchar(64) | | state | varchar(2) | +------------------------+--------------+ 的多条消息。每个from_id都有一行包含from_idcntycounty。和city以及具有相同state的所有其他行都具有这些列的NULL值。我想用每个from_id的相同值填充它们。这在MySQL中可行吗?我的第一个想法是写一个Python脚本来做到这一点,但也许这是过度的。

1 个答案:

答案 0 :(得分:2)

您可以使用获取所有非空值的子查询,然后使用带连接的UPDATE查询:

UPDATE
  tweets INNER JOIN (
    SELECT from_id, MAX(cnty) AS cnty, MAX(country) AS country, MAX(city) AS city, ...
    FROM tweets
    GROUP BY from_id) m
  ON tweets.from_id = m.from_id
SET
  tweets.cnty=m.cnty,
  tweets.country=m.country,
  tweets.city=m.city,
  ...