SQL...如何使用同一表中其他行的数据更新行?

标签 sql mysql

我正在使用 MySQL 服务器,并且我有一个表,其中某些行缺少数据。我想使用其他行的信息更新行。我的表格看起来像:

id,signin,deviceId,deviceModel
1,2010-10-12,9ABC9,
2,2010-10-12,3E44F,
3,2010-10-13,D3453,
4,2010-10-14,D3453,
5,2010-10-14,D3453,HW1
6,2010-10-12,3E44F,HW2
7,2010-10-12,9ABC9,HW1

对于前几个条目,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

关于SQL...如何使用同一表中其他行的数据更新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963081/

相关文章:

c# - 带外键的 Fluent nHibernate "not-null property references a null or transient value"

MySql 访问冲突不在 YEAR MONTH 和 MAX 组中

MySQL 逻辑帮助

sql - 如何从一个日期获取下一个记录日期和从一个日期获取最后一个记录日期?

php - INNODB 引擎中的 MySql AUTO_INCRMENT 作为第二列

sql - Impala/SQL 如何将所有其他字段放在 group by 语句中?

mysql - 如何在一个表中为另一个表中的每个用户创建一行?

sql - distinct vs group by 哪个更好

mysql - 动态mysql查询两张表

MYSQL-显示受聘年限