首页 > 解决方案 > 如何检查表中的每个字段是另一个表中字段的nt子字符串

问题描述

我的方案看起来像:我有两个表:table1table2 table1有一个字段:table1-name字符串类型。 table2有一个字段:table2-name字符串类型。

我想返回table1-name不是任何table2-name记录的子字符串的所有行。我做了:

SELECT DISTINCT `table2-name`.`table2`
FROM `table2`, `table1`
WHERE `table2-name`.`table2` NOT IN (SELECT `table1-name` FROM `table1`)
LIMIT 100;

但这会返回所有table2-name不等于table1-name。我需要的是所有table2-name不是table2-name.

例子:

table1-name:aa.abc.com, bb.com, xyz.com

table2-name: abc.com, aaa.com, xyz.com

上面的查询将返回:

abc.com
aaa.com

我要返回的是:
aaa.com

我不想abc.com被退回,因为它是aa.abc.com.

你能纠正我的查询吗?

标签: mysqlsql

解决方案


用于NOT EXISTS这种情况:

select *
from table1 t1
where not exists
(
  select *
  from table2 t2
  where t2.`table2-name` like concat('%', t1.`table1-name`, '%')
);

顺便说一句:您应该避免table2-name使用需要引号才能使用它们的名称。改用类似的东西table2_name


推荐阅读