mysql 如何在 CONCAT 中使用 WHERE
How to use WHERE in CONCAT in mysql
这是我在 mysql 中作为初学者的场景。
有2张桌子。
- usermeta 有 3 列 user_id、meta_key、元值
- users_role 有 2 列 uid, rid.
我需要根据 users_roles.rid 值在 wp_usermeta 中插入行。
- User_id 来自 users_roles (users_role.uid 匹配 wp_usermeta.user_id).
- Meta_key 设置为 dokan_profile_settings.
- Meta_value 应该是 :
的 CONCAT
textA + meta_value 来自 meta_key dokan_site_name 的行已经存在于 wp_usermeta + textB.
这是我的问题。我想不出正确实现 CONCAT 的正确方法。
当我 运行 我得到:#1242 - 子查询 returns 多于 1 行
INSERT INTO usermeta (
user_id,
meta_key,
meta_value
)
SELECT
uid,
'dokan_profile_settings',
CONCAT('textA', (SELECT usermeta.meta_value FROM usermeta WHERE usermeta.meta_key LIKE 'dokan_store_name'), 'textB')
AS meta_value
FROM users_roles WHERE rid LIKE '4';
如果我只是 运行 CONCAT 的 SELECT 部分,正如 Paul 评论中指出的那样:
SELECT usermeta.meta_value FROM usermeta
WHERE usermeta.meta_key LIKE 'dokan_store_name'
我得到了预期的结果,但我无法弄清楚整个查询失败的原因。
如错误消息所述,您不能在 CONCAT() 函数中使用 returns 多个字符串值的子查询。
解决这个问题的一个简单方法是 GROUP_CONCAT() 子查询的结果:CONCAT('textA', (SELECT GROUP_CONCAT(usermeta.meta_value) FROM usermeta WHERE usermeta.meta_key LIKE 'dokan_store_name'), 'textB')
这是我在 mysql 中作为初学者的场景。
有2张桌子。
- usermeta 有 3 列 user_id、meta_key、元值
- users_role 有 2 列 uid, rid.
我需要根据 users_roles.rid 值在 wp_usermeta 中插入行。
- User_id 来自 users_roles (users_role.uid 匹配 wp_usermeta.user_id).
- Meta_key 设置为 dokan_profile_settings.
- Meta_value 应该是 : 的 CONCAT
textA + meta_value 来自 meta_key dokan_site_name 的行已经存在于 wp_usermeta + textB.
这是我的问题。我想不出正确实现 CONCAT 的正确方法。
当我 运行 我得到:#1242 - 子查询 returns 多于 1 行
INSERT INTO usermeta (
user_id,
meta_key,
meta_value
)
SELECT
uid,
'dokan_profile_settings',
CONCAT('textA', (SELECT usermeta.meta_value FROM usermeta WHERE usermeta.meta_key LIKE 'dokan_store_name'), 'textB')
AS meta_value
FROM users_roles WHERE rid LIKE '4';
如果我只是 运行 CONCAT 的 SELECT 部分,正如 Paul 评论中指出的那样:
SELECT usermeta.meta_value FROM usermeta
WHERE usermeta.meta_key LIKE 'dokan_store_name'
我得到了预期的结果,但我无法弄清楚整个查询失败的原因。
如错误消息所述,您不能在 CONCAT() 函数中使用 returns 多个字符串值的子查询。
解决这个问题的一个简单方法是 GROUP_CONCAT() 子查询的结果:CONCAT('textA', (SELECT GROUP_CONCAT(usermeta.meta_value) FROM usermeta WHERE usermeta.meta_key LIKE 'dokan_store_name'), 'textB')