【问题标题】:MySQL use REGEXP with multiple rowsMySQL 使用多行的 REGEXP
【发布时间】:2020-11-13 10:57:50
【问题描述】:

我有一个包含两个表的数据库。第一个表有一列包含正则表达式(大约有 200 行)。第二个表有多行,我想从第二个表中获取与第一个表中的所有正则表达式匹配的所有行。

例如,如果第一个表有:

^google.com/orp
^amazon.com/ssw
^stack/ik9

第二张桌子有

stack/ik9282
msifks0
amazon.com/ssw9a

结果应该是

stack/ik9282
amazon.com/ssw9a

我尝试使用GROUP_CONCAT 来执行此操作,并从我的第一个表中获取正则表达式为^google.com/orp|^amazon.com/ssw|^stack/ik9,但GROUP_CONCAT 的最大长度为1024,我需要更多。

【问题讨论】:

    标签: mysql sql regex


    【解决方案1】:
    SELECT DISTINCT strings.value
    FROM strings
    JOIN patterns ON strings.value REGEXP patterns.pattern;
    

    fiddle


    GROUP_CONCAT 的最大长度为 1024

    您可以调整group_concat_max_len变量设置。

    【讨论】:

    • 谢谢!如何修改它,例如我将获得与正则表达式不匹配的行?我实际上需要一个查询来获取匹配的内容,而另一个查询来获取不匹配的内容。
    • @tatulea 。 . .这不是你在这里问的问题。这回答了您确实提出的问题。您可以使用left joinwhere 修改此答案以获取不匹配的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2014-02-03
    • 2011-12-21
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多