0

我有下表:

person       drug
------       -----
1            Y
2            Y
2            other
3            X
4            X
5            X
5            other
6            other
7            Z

但是,如果有人有药物x,y,z(这只是一个不同的选择)加上“其他”-那么我想删除包含其他的行

这意味着具有“X”和“other”的人将删除包含“other”的行,但只有“other”的人将保留为“other”。IE

person       drug
------       -----
1            Y
2            Y
3            X
4            X
5            X
6            other
7            Z

其中第 6 个人只有其他,所以保持这种状态,但第 2 个人和第 5 个人删除了“其他”行,因为他们有其他药物选择(x、y 或 z)。

非常感谢您的帮助。

4

1 回答 1

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').

于 2013-06-19T13:18:08.783 回答