mysql:在出现相同值的列中更新行更改值
你能帮我准备一个sql吗?它可以通过将meta_键有“_缩略图_id”值的行的“meta_值”设置为“post_id”值来更改meta_键有“_wp_attached_file”值且“meta_值”有相同图像名称的行的列meta_值。 这有点复杂,所以我给你举个例子。我想改变这一点:mysql:在出现相同值的列中更新行更改值,mysql,sql,Mysql,Sql,你能帮我准备一个sql吗?它可以通过将meta_键有“_缩略图_id”值的行的“meta_值”设置为“post_id”值来更改meta_键有“_wp_attached_file”值且“meta_值”有相同图像名称的行的列meta_值。 这有点复杂,所以我给你举个例子。我想改变这一点: +---------+---------+------------------+--------------+ | meta_id | post_id | meta_key | meta_value
+---------+---------+------------------+--------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+------------------+--------------+
| 312 | 170 | _wp_attached_file| IMGP0289.jpg |
| 313 | 54 | _thumbnail_id | IMGP0289.jpg |
| 314 | 169 | _wp_attached_file| IMGP0453.jpg |
| 315 | 53 | _thumbnail_id | IMGP0453.jpg |
为此:
+---------+---------+------------------+--------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+------------------+--------------+
| 312 | 170 | _wp_attached_file| IMGP0289.jpg |
| 313 | 54 | _thumbnail_id | 170 |
| 314 | 169 | _wp_attached_file| IMGP0453.jpg |
| 315 | 53 | _thumbnail_id | 169 |
非常感谢。这里有一个临时表克隆辅助解决方案 下面是演示,使用提供的数据进行验证,结果与预期一致 SQL: 输出:
mysql> SELECT * FROM tbl;
+---------+---------+-------------------+--------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+-------------------+--------------+
| 312 | 170 | _wp_attached_file | IMGP0289.jpg |
| 313 | 54 | _thumbnail_id | IMGP0289.jpg |
| 314 | 169 | _wp_attached_file | IMGP0453.jpg |
| 315 | 53 | _thumbnail_id | IMGP0453.jpg |
+---------+---------+-------------------+--------------+
4 rows in set (0.00 sec)
mysql> -- query needed
mysql> CREATE TEMPORARY TABLE tbl_tmp LIKE tbl;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO tbl_tmp SELECT * FROM tbl;
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> UPDATE
-> tbl t1
-> SET
-> meta_value = (SELECT
-> post_id
-> FROM
-> tbl_tmp t2
-> WHERE
-> t1.meta_value = t2.meta_value AND
-> t2.meta_key = '_wp_attached_file'
-> LIMIT 1
-> )
-> WHERE
-> t1.meta_key = '_thumbnail_id';
FROM Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> SELECT * FROM tbl;
+---------+---------+-------------------+--------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+-------------------+--------------+
| 312 | 170 | _wp_attached_file | IMGP0289.jpg |
| 313 | 54 | _thumbnail_id | 170 |
| 314 | 169 | _wp_attached_file | IMGP0453.jpg |
| 315 | 53 | _thumbnail_id | 169 |
+---------+---------+-------------------+--------------+
4 rows in set (0.00 sec)
那么
UPDATE tbl x
JOIN tbl y
ON y.meta_value = x.meta_value
SET x.meta_value = y.post_id
WHERE x.meta_key = '_thumbnail_id'
AND y.meta_key = '_wp_attached_file';
为什么要临时摆桌子?@草莓,因为没有另一张桌子的帮助,我没有做好准备。如果只使用tbl,我得到了“1093(HY000):您不能在FROM子句中为update指定目标表't1'。你有什么想法吗?@草莓,这太酷了!我学到了很多。你应该以ans的身份发布。
UPDATE tbl x
JOIN tbl y
ON y.meta_value = x.meta_value
SET x.meta_value = y.post_id
WHERE x.meta_key = '_thumbnail_id'
AND y.meta_key = '_wp_attached_file';