mysql - 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 ║
╠══════════════╩════════════════════════╩══════════════════╣
解决方案
您可以使用更新连接语法:
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
推荐阅读
- django - 从 Django 迁移中调用 emit_post_migrate_signal 是否安全?
- react-query - 好奇为什么我们不能在 onSuccess 中获得查询中的参数?
- javascript - 新手努力通过浏览器运行 Javascript
- sql - Laravel 中的 WhereColumn 为空
- django - 链式下拉验证错误。形式作品
- arm - 将现有代码从 STM32F0 转换为 Atmel SAMD21(两者都是基于 arm 的 cortex-M0)
- width - Graphviz:垂直对齐子图
- html - Flexbox在换行之前溢出截断项目
- magento-2.3 - 无法在 Magento 2.3.6 中选择第一个色板
- python - Alexa Skills Kit(AudioPlayer 接口):在 SessionEndedRequest 之后没有提示的音频恢复