一个表t1有一个partnercode
列(来自t1的SELECT partnercode)返回1859个varchar行。
在另一个带有username
varchar列的表t2上(与t1没有关键关系),我需要编写一个查询,删除t2.username以任何字符串值开头的所有行t1.partnercode。
我尝试使用查询执行此操作:
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中的所有记录。
答案 0 :(得分:2)
怎么样
SELECT t2.username
FROM t2
where not exists (select null
from t1
where t2.username REGEXP CONCAT("^", t1.partnercode)
使用exists使条件一次只考虑一行。