【发布时间】:2011-02-10 21:42:30
【问题描述】:
我正在使用 MySQL 服务器,并且我有一个表,其中一些行缺少数据。我想使用其他行的信息更新行。我的桌子看起来像:
对于前几个条目,deviceModel 字段为空。我想使用在同一个表的其他行中为 deviceId 找到的 deviceModel 更新此值。在上面的例子中,第 1 行应该有 deviceModel = HW1,第 2 行应该有 deviceModel = HW2,等等。
谢谢!
【问题讨论】:
我正在使用 MySQL 服务器,并且我有一个表,其中一些行缺少数据。我想使用其他行的信息更新行。我的桌子看起来像:
对于前几个条目,deviceModel 字段为空。我想使用在同一个表的其他行中为 deviceId 找到的 deviceModel 更新此值。在上面的例子中,第 1 行应该有 deviceModel = HW1,第 2 行应该有 deviceModel = HW2,等等。
谢谢!
【问题讨论】:
首先,这是一个非规范化的设计。您应该将 deviceModel -> deviceId 关系移动到另一个表。
第二:
UPDATE
yourTable AS t1
CROSS JOIN (
SELECT DISTINCT
deviceId, deviceModel
FROM
yourTable
WHERE
deviceModel IS NOT NULL
) AS t2
USING (deviceId)
SET
t1.deviceModel = t2.deviceModel
WHERE
t1.deviceModel IS NULL
【讨论】:
UPDATE MyTable m1, MyTable m2
SET m1.deviceModel= m2.deviceModel
WHERE m1.deviceid=m2.deviceid and m2.deviceModel is not null
【讨论】:
SQL synax error near 'from。更不用说文档了:dev.mysql.com/doc/refman/5.5/en/update.html 你的第二个查询似乎很好。