gpt4 book ai didi

Mysql,通过带有where子句的内部select交换逗号分隔值

转载 作者:行者123 更新时间:2023-11-28 23:20:30 25 4
gpt4 key购买 nike

我有 2 个表:

tab1(值有来自 tab2 的逗号分隔 ID):

id1   val1
-----------
1 1
2 1,2
3 1,3

标签 2:

id2   val2
-----------
1 a
2 b
3 c

我想列出 Tab1 中的值并将逗号分隔的 val1 替换为 val2

我做了这样的事情:

SELECT *, (SELECT GROUP_CONCAT(val2) FROM tab2 WHERE id2 IN val1 ) from tab1

但它在 tab1 的 'val1 ) 附近生成语法错误

当我删除 Where 子句时,它完美地工作:

SELECT *, (SELECT GROUP_CONCAT(val2) FROM tab2) from tab1

它产生:

id1   val1  (SELECT GROUP_CONCAT(val2) FROM tab2 )
1 1,2 a,b,c
2 1,3 a,b,c

但我想在第 3 行中包含与 Val1 数字对应的字母(仅 a、b 和 a、c)。关键是用 tab2.val2 中的字母替换 Tab1.val1 中的数字:1,2...。它应该产生:

id1   val1  (SELECT GROUP_CONCAT(val2) FROM tab2 WHERE id2 IN val1)
1 1,2 a,b
2 1,3 a,c

当我添加 where 子句时发生了一些事情,但我找不到我的错误。

也许有其他想法用其他表中的字母值替换这个逗号分隔的数字?

最佳答案

您可以使用 FIND_IN_SET()功能:

SELECT *, (SELECT GROUP_CONCAT(val2) FROM `tab2` WHERE FIND_IN_SET(id2,val1) > 0 ) as val2_tab2 FROM `tab1` ;

这是一个 fiddle :http://rextester.com/ZMFML52150

关于Mysql,通过带有where子句的内部select交换逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41869639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com