Mysql 如何更新列以匹配同一表中另一列的数据
我正在尝试执行一个查询,该查询将更新parent\u id行,以反映与parent\u id具有相同成员id的相应用户名 下面是db_name.members表的表示形式,我想将父\u id转换为相应的用户名Mysql 如何更新列以匹配同一表中另一列的数据,mysql,sql,mariadb,Mysql,Sql,Mariadb,我正在尝试执行一个查询,该查询将更新parent\u id行,以反映与parent\u id具有相同成员id的相应用户名 下面是db_name.members表的表示形式,我想将父\u id转换为相应的用户名 +--------+----------+-----------+-----------+ | name | username | member_id | parent_id | +--------+----------+-----------+-----------+ | Jeff
+--------+----------+-----------+-----------+
| name | username | member_id | parent_id |
+--------+----------+-----------+-----------+
| Jeff | Jeff | 167 | NULL |
| Asia | Asia | 143 | NULL |
| Bogart | Bogart | 389 | 167 |
| Greg | Greg | 894 | NULL |
| Hatsy | Hatsy | 328 | 167 |
| Super | Super | 721 | NULL |
| Goku | Goku | 534 | 894 |
| Banana | Banana | 520 | NULL |
| Kyle | Kyle | 456 | 520 |
+--------+----------+-----------+-----------+
之后它应该是什么样子:
+--------+----------+-----------+-----------+
| name | username | member_id | parent_id |
+--------+----------+-----------+-----------+
| Jeff | Jeff | 167 | NULL |
| Asia | Asia | 143 | NULL |
| Bogart | Bogart | 389 | Jeff |
| Greg | Greg | 894 | NULL |
| Hatsy | Hatsy | 328 | Jeff |
| Super | Super | 721 | NULL |
| Goku | Goku | 534 | Greg |
| Banana | Banana | 520 | NULL |
| Kyle | Kyle | 456 | Banana |
+--------+----------+-----------+-----------+
这是我当前(不工作)的查询:
您可以通过使用
内部联接的更新:
UPDATE members m1 INNER JOIN members m2 ON m1.parent_id = m2.member_id
SET m1.parent_id = m2.username
请记住,如果parent\u id
列是整数/数字列,则不能将用户名设置为此列。您可以使用选择
而不是更新
:
SELECT m1.name, m1.username, m1.member_id, m2.username AS parent_username
FROM members m1 LEFT JOIN members m2 ON m1.parent_id = m2.member_id
您确定需要这样做吗?每次需要父ID的名称时使用联接不是更好吗?
SELECT m1.name, m1.username, m1.member_id, m2.username AS parent_username
FROM members m1 LEFT JOIN members m2 ON m1.parent_id = m2.member_id