求筛选排除被同count的其他phrase包含的记录的SQL查询
SQL查询:移除被同count值短语包含的记录
数据表结构
现有数据表 this_table(其中phrase字段始终唯一):
| phrase | count |
|---|---|
| elemo | 11 |
| e | 37 |
| elemo a | 11 |
| r sundt | 6 |
| wit | 102 |
| lolo m | 102 |
| o | 1475 |
| mo | 111 |
| lo m | 186 |
| domo | 111 |
需求
编写一条SQL查询语句,移除满足以下条件的记录(记为record A):存在另一条记录(record B),record A的phrase字段值被record B的phrase字段值包含,且两者的count字段值相同。
期望结果
执行查询后应得到如下结果:
| phrase | count |
|---|---|
| e | 37 |
| elemo a | 11 |
| r sundt | 6 |
| wit | 102 |
| lolo m | 102 |
| o | 1475 |
| lo m | 186 |
| domo | 111 |
解决方案
使用NOT EXISTS子查询筛选出不符合被包含条件的记录,核心逻辑是:对每条记录,检查是否不存在另一条同count值且包含当前phrase的记录。
SQL语句
SELECT t1.phrase, t1.count FROM this_table t1 WHERE NOT EXISTS ( SELECT 1 FROM this_table t2 WHERE t2.count = t1.count AND t2.phrase != t1.phrase AND t2.phrase LIKE CONCAT('%', t1.phrase, '%') );
语句说明
t1代表主查询中待判断的记录(record A)- 子查询中
t2代表可能包含t1.phrase的记录(record B) t2.count = t1.count确保两者count值一致t2.phrase != t1.phrase排除记录自身(因phrase字段唯一,可省略,但加上更严谨)t2.phrase LIKE CONCAT('%', t1.phrase, '%')判断t1.phrase是否被t2.phrase包含
内容的提问来源于stack exchange,提问作者user18882423
相关产品推荐
相关产品推荐

