gpt4 book ai didi

mysql - 如何匹配两个表,直到表 1 行值在表 2 列中匹配 3 次

转载 作者:行者123 更新时间:2023-11-29 07:30:43 24 4
gpt4 key购买 nike

我有两个表,表1如下

session                 status  SN          error_code
3f24197394c521349206a11 Fail ACNW6676 40774,500005
7385122219fa35c37942511 Fail ACNW6676 40555,40187,500004,500005
412afc12a33601011721415 Fail ACNW6676 100001,500005
9213232191116c821a59f86 Fail ACNW6676 500005

和下表2

error
0001
500005
40774

如果我想对照表 2(错误)检查表 1(错误代码),如果匹配 3 次将返回 1。例如,500005 from table 2 match to table 1 (error_code) 3次它显示错误代码和匹配的数量。表 1 500005 和 40774 的错误不能对匹配数求和。表示表 2 中的每个值都是分开的

对此有什么想法吗?

想要的结果:-

error  count
500005 4
40774 1

如果计数3及以上返回1

最佳答案

此处的技巧是表table1table2 之间的连接。

使用带通配符的 LIKE 将不起作用。

示例:这将不起作用,因为它会错误地将 100001,5000050001 连接起来。

...from table1 join table2 ON table1.error_code LIKE concat('%', table2.error, '%')

有必要检查 table2.error 是否包含在 table1.error_code 中作为一个完整的单词。这可以使用正则表达式来表达。

\b 表示单词边界的正则表达式

\bword\b

将匹配文本

this sentence has a word in it

但不会匹配文本

this sentence is made with words

mysql 使用这些标记来表示单词边界

[[:<:]], [[:>:]]

因此我们构造我们的查询

SELECT
error
, count(*) count
FROM table1
JOIN table2
ON error_code REGEXP CONCAT('[[:<:]]', error, '[[:>:]]')
GROUP BY 1;

哪些应该产生行:

+--------+----------+
| error | count(*) |
+--------+----------+
| 40774 | 1 |
| 500005 | 4 |
+--------+----------+

关于mysql - 如何匹配两个表,直到表 1 行值在表 2 列中匹配 3 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412921/

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