gpt4 book ai didi

mysql 在列表中选择正则表达式/子字符串

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

我有表 A:

---CODE-----
|21XDS60020| <-There is somewhere in table B
|21XDS60021|
|21XDS60023| <-There is somewhere in table B
|21XDS60025|
|21XDS60026|

还有表B:

----------------DESCRIPTION--------------------------
|FAX21XDS60020[2008_504571][NMS]sdfg bla bla |
|FAX21XDS52167[2008_XXX324][NMS]sdfg bla blb |
|FAX21P025P61[2006_501909][21XDS60023]sdfg bla blc |
|FAX21XDS60025[2006_502499][NMS]sdfg bla bld |
|FAX21P0251296[2007_503659][NMS]sdfg bla ble |

预期结果:

---------------------DESCRIPTION--------------------
|FAX21XDS60020[2008_504571][NMS]sdfg bla bla |
|FAX21P025P61[2006_501909][21XDS60023]sdfg bla blc |

我想从表 B 中选择所有“描述”记录,如果它们包含表 A 的“代码”记录之一作为子字符串我不知道在那种情况下我是否可以以某种方式使用 IN 或 EXISTS 和 REGEXP 语句。

类似的东西(当然下面是​​错误的):

SELECT description FROM B WHERE description IN (select REGEXP(.*code.*) FROM A);

最佳答案

这是一个带有讨厌的 nasty unsargable slow 的 JOIN 操作ON 条件。

SELECT B.description
FROM A
JOIN B ON B.description LIKE CONCAT('%', A.code, '%')

它很慢,因为 'needle' LIKE '%haystack%' 意味着 MySQL 必须查看大海捞针中的所有东西才能找到针。

另一方面,'needle' LIKE 'haystack%'(没有前导 %)可以使用索引。因此,如果这适用于您的数据,您应该使用它。

SELECT B.description
FROM A
JOIN B ON B.description LIKE CONCAT('FAX', A.code, '%')

关于mysql 在列表中选择正则表达式/子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42030046/

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