gpt4 book ai didi

mysql - Distinct,REGEXP应用于MYSQL中的Field和CONCAT_GROUP去除存储过程中的重复单词

转载 作者:行者123 更新时间:2023-11-30 01:22:17 25 4
gpt4 key购买 nike

上下文:

我有下表(示例):

| ID  |   name   | COUNTRY                  |
---------------------------------------------
| 1 | cristian | FRANCIA,HOLANDA,ALEMANIA |
| 2 | Andrea | FRANCIA,ESPAÑA,BELGICA |
| 3 | Fabian | BELGICA,ALEMANIA |

我需要将所有国家/地区放入一个字段中,但我需要没有重复值。

所以,我尝试执行以下查询:

select GROUP_CONCAT(DISTINCT(COUNTRY)) FROM  Usuario;

或使用正则表达式有些像:

select GROUP_CONCAT(DISTINCT(COUNTRY)) FROM  Usuario
WHERE GROUP_CONCAT(COUNTRY) REGEXP 'somepattern'

错误答案是下一个:

FRANCIA,HOLANDA,ALEMANIA,FRANCIA,ESPAÑA,BELGICA,BELGICA,ALEMANIA

预期的答案是:

FRANCIA,HOLANDA,ALEMANIA,ESPAÑA,BELGICA

或者制作一些存储过程

如何获得预期答案、N 个值不同值

感谢您的知识和时间!

最佳答案

MySQL 中没有内置函数可以执行此操作。

可以在 MySQL 中进行大量字符串处理,但它很丑陋,并且逗号分隔列表中字符串值的数量必须有已知的有限限制。

这是从所有这些逗号分隔列表中获取不同字段值列表的一种方法:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(country,','),',',1),',',-1) AS fld
FROM mytable
HAVING fld <> ''
UNION
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(country,','),',',2),',',-1) AS fld
FROM mytable
HAVING fld <> ''
UNION
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(country,','),',',3),',',-1) AS fld
FROM mytable
HAVING fld <> ''
UNION
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(country,','),',',4),',',-1) AS fld
FROM mytable
HAVING fld <> ''
UNION
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(country,','),',',5),',',-1) AS fld
FROM mytable
HAVING fld <> ''
UNION
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(country,','),',',6),',',-1) AS fld
FROM mytable
HAVING fld <> ''
ORDER BY 1

我将把它作为一个练习,让您弄清楚它在做什么以及它是如何工作的。

现在每个值都位于单独的行中,我们认为您可能希望保持这种方式。

很容易将该查询包装在另一个查询中,并使用 GROUP_CONCAT 函数,并返回带有包含逗号分隔列表的字符串值的单行。

关于mysql - Distinct,REGEXP应用于MYSQL中的Field和CONCAT_GROUP去除存储过程中的重复单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408763/

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