gpt4 book ai didi

mysql - 对 MySQL 中 GROUP_CONCAT 的每个元素执行 LIKE 操作

转载 作者:行者123 更新时间:2023-12-05 03:22:46 24 4
gpt4 key购买 nike

我在 Mysql 中有一个子查询,它使用 GROUP_CONCAT 函数对连接表的一个属性(1-N 关系)执行聚合

SELECT t1.id, GROUP_CONCAT(t2.name) AS list 
FROM table1 t1
LEFT JOIN table2 t2 ON t2.x_id = t1.id
GROUP BY t1.id

返回以下内容:

<表类="s-表"><头>id列表<正文>1value-1,value_2,x-value-12值-13空

现在在主查询中,我需要执行某种 LIKE 操作来映射集合中的每个元素,例如以下语句:

WHERE list LIKE "x-value%"

应该返回 id 为 1 的元素,并返回一个空结果集。

有什么想法吗?

对 Barmar 回答的回应:

我没有在子查询中使用 LIKE,因为我有一个功能可以在我使用 FIND_IN_SET 的地方对名称进行负过滤,这就是我首先做组的原因。例如如果我没有做分组,会得到如下结果:

<表类="s-表"><头>id值<正文>1值-11值_21x-值-12值-13空

然后如果我不对它进行分组,并且想要没有值 value-1

的 id
WHERE value != "value-1"

它会返回

<表类="s-表"><头>id值<正文>1值_21x-值-1

意思是我会得到 id 1,即使它的值是 value-1

最佳答案

使用正则表达式匹配x-value在开头或逗号之后。

WHERE list REGEX '(^|,)x-value'

但最好在另一个子查询中执行此操作。

SELECT t1.id, GROUP_CONCAT(t2.name) AS list
FROM table1 AS t1
JOIN table2 AS t2 ON t1.id = t2.x_id
JOIN (
SELECT DISTINCT x_id
FROM table2
WHERE name LIKE 'x-value%'
) ON t1.id = t2.x_id

不需要使用 LEFT JOIN因为您不需要任何在 table2 中不匹配的结果(因为它们不匹配 x-value% )。

您需要加入两次:一次是为了获取每个 ID 的所有名称,第二次是为了过滤出具有 x-value% 的 ID在任何名称中。

关于mysql - 对 MySQL 中 GROUP_CONCAT 的每个元素执行 LIKE 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72635057/

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