【发布时间】:2018-03-17 23:41:20
【问题描述】:
一个表 t1 有一个
partnercode列,(从 t1 中选择合作伙伴代码)返回 1859 个 varchar 行。在另一个具有
usernamevarchar 列(与 t1 没有键关系)的表 t2 上,我需要编写一个查询来删除 t2.username 以 t1 中的任何字符串值开头的所有行。合作伙伴代码。
我试图通过查询来做到这一点:
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 的所有记录都应从查询中过滤掉。
【问题讨论】:
-
它奇怪的数据库模式...
-
它们来自不同的数据库。一个用于在公司不再使用的遗留系统中填充另一个。
-
从每个表中粘贴几条记录。如果人们能看到一些有代表性的数据,他们就能更有效地帮助你。请务必注明哪些记录是
t1,哪些是t2。 -
这太低效了。认真考虑规范化您的架构