-
一个表 t1 有一个
partnercode
列(从 t1 中选择合作伙伴代码(返回 1859 个 varchar 行。 -
在另一个具有
username
varchar 列(与 t1 没有键关系(的表 t2 上,我需要编写一个查询来删除 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
年121厘米
1234
来自 t2.username
的记录1031-PNGUQG
1032-X2NOAN121
121厘米-VBFWAA13b
1234-SETJ6b5
在上面的示例数据中,应从查询中筛选出来自 t2.username 的所有记录。
怎么样
SELECT t2.username
FROM t2
where not exists (select null
from t1
where t2.username REGEXP CONCAT("^", t1.partnercode)
使用 exists 使条件一次只考虑一行。