如果其中一行的某一列的值与所查找的值匹配,我试图删除所有包含ID的行
我有下表:
表1:
| ID | | offer |
-------------------------
| 001 | | 'SE;SL' |
| 001 | | 'WX' |
| 001 | | 'PW' |
| 002 | | 'WS' |
| 002 | | 'EL' |
| 003 | | 'SE' |
| 004 | | 'ZS' |
| 004 | |'PW;SE;ODL'|
SELECT ID,
offer
FROM table1
GROUP BY
ID,
offer,
HAVING sum(case when offer LIKE '%SE%' then 1 else 0 end) = 0
目前,我可以删除该行,如下所示:
| ID | | offer |
-------------------------
| 001 | | 'WX' |
| 001 | | 'PW' |
| 002 | | 'WS' |
| 002 | | 'EL' |
| 004 | | 'ZS' |
预期结果
| ID | | offer |
-------------------------
| 002 | | 'WS' |
| 002 | | 'EL' |
如您所见,我尝试将“报价”列的其中一行中至少出现一次“ SE”的所有ID隔离。
如果有人可以帮助我理解,我尝试了很多事情,做了几次搜索都没有成功!
非常感谢
答案 0 :(得分:1)
不存在
SELECT ID,
offer
FROM table1 t1
where not exists ( select 1 from table1 t2 where t1.id=t2.id
and t2.offer like '%SE%')
答案 1 :(得分:1)
使用NOT EXISTS
,但是您还必须检查所搜索的值是否不属于另一个值的情况。
因此,请在开头和结尾处将;
与offer列和值连接起来:
select id, offer
from table1 t
where not exists (
select 1 from table1
where
id=t.id
and
';' || offer || ';' like '%;SE;%'
)
修改
将最后一行替换为:
chr(59) || offer || chr(59) like '%' || chr(59) || 'SE' || chr(59) || '%'