MySQL如何使用REGEXP按一列的行过滤一列的行

时间:2018-03-17 23:41:20

标签: mysql regex

  1. 一个表t1有一个partnercode列(来自t1的SELECT partnercode)返回1859个varchar行。

  2. 在另一个带有username varchar列的表t2上(与t1没有关键关系),我需要编写一个查询,删除t2.username以任何字符串值开头的所有行t1.partnercode。

  3. 我尝试使用查询执行此操作:

    SELECT t2.username FROM t2 where t2.username NOT REGEXP(CONCAT_WS("|^", SELECT partnercode from t1)) 
    

    并获得错误代码:1242。子查询返回超过1行。

    我知道如果我将单个字符串提供给REGEXP()函数并在其前面添加^,这将删除正确的值。但是在我有1859行这些值的情况下,我不确定正确的方法。

    来自t1.partnercode的记录 1031
    1032
    121CM
    1234

    来自t2.username的记录 1031-PNGUQG
    1032-X2NOAN121
    121CM-VBFWAA13b
    1234-SETJ6b5

    在上面的示例数据中,应该从查询中过滤掉t2.username中的所有记录。

1 个答案:

答案 0 :(得分:2)

怎么样

  SELECT t2.username 
    FROM t2 
    where not exists (select null 
                        from t1 
                        where t2.username REGEXP CONCAT("^", t1.partnercode)

使用exists使条件一次只考虑一行。