我有下表:
person drug
------ -----
1 Y
2 Y
2 other
3 X
4 X
5 X
5 other
6 other
7 Z
但是,如果有人有药物x,y,z
(它只是一个不同的选择)加上“其他” - 那么我想删除包含其他的行
这意味着拥有“X”和“其他”的人会删除包含“其他”的行,但只有“其他”的人会保留为“其他”。即。
person drug
------ -----
1 Y
2 Y
3 X
4 X
5 X
6 other
7 Z
其中6人只有其他人,所以保持这种方式,但是第2和第5人已经删除了“其他”行,因为他们有其他药物选择(x,y或z)。
非常感谢您的帮助。
答案 0 :(得分:1)
目前还不清楚您是希望在查询结果中还是在数据本身中删除此项。要从查询中返回没有此行的结果,可以这样写:
select t.*
from t
where not (t.drug = 'other' and
exists (select 1 from t t2 where t2.person = t.person and t2.drug = 'x')
)
要处理'x','y'或'z'中的任何一个,请将最后一个语句更改为t2.drug in ('x', 'y', 'z')
。