首页 > 解决方案 > MySQL 查询:查找键(如“Y”)的列,然后使用另一列唯一 ID 更新第三列?

问题描述

我将尽力解释我试图实现的 SQL 查询

我有以下结构:

用户元

列:: user_id、meta_key、meta_value

我需要找到“_expired_user_expired”和meta_value为“Y”的所有meta_key

SELECT * 
FROM usermeta
WHERE meta_key LIKE '_expire_user_expired' AND meta_value LIKE 'y';

现在到最困难的部分(对我来说)

我需要使用列user_id中的唯一值来更新meta_key 'user_disabled' 以获得meta_value '1'。

视觉解释:

╔══════════════╦════════════════════════╦══════════════════╗
║   user_id    ║    meta_key            ║     meta_value   ║
╠══════════════╩════════════════════════╩══════════════════╣
║      1       ║ user_disabled          ║         0        ║
║      1       ║ _expired_user_expired  ║         Y        ║
║      2       ║ user_disabled          ║         0        ║
║      2       ║ _expired_user_expired  ║         N        ║
║      3       ║ user_disabled          ║         0        ║
║      3       ║ _expired_user_expired  ║         N        ║
╠══════════════╩════════════════════════╩══════════════════╣

查询成功后会变成:

╔══════════════╦════════════════════════╦══════════════════╗
║   user_id    ║    meta_key            ║     meta_value   ║
╠══════════════╩════════════════════════╩══════════════════╣
║      1       ║ user_disabled          ║         1        ║
║      1       ║ _expired_user_expired  ║         Y        ║
║      2       ║ user_disabled          ║         0        ║
║      2       ║ _expired_user_expired  ║         N        ║
║      3       ║ user_disabled          ║         0        ║
║      3       ║ _expired_user_expired  ║         N        ║
╠══════════════╩════════════════════════╩══════════════════╣

标签: mysqlsqlsql-update

解决方案


您可以使用更新连接语法:

UPDATE usermeta a
JOIN   usermeta b ON a.user_id = b.user_id AND
                     a.meta_key = 'user_disabled' AND
                     b.meta_key = '_expired_user_expired' AND
                     b.meta_value = 'Y'
SET    a.meta_value = 1

推荐阅读