根据来自不同列的值排除记录

时间:2012-11-19 09:37:17

标签: sql oracle

我有一个看起来像这样的表:

| CODE   |  LEVEL1  |  LEVEL2  |  LEVEL3  |   SEC_ID   |
| CODE1  |  LEV1    |  LEV2    |  LEV3    |   123456   |
| CODE2  |  LEV1    |  LEV2    |  LEV3    |   234561   |
| CODE2  |  LEV1    |  LEV2    |  Term    |   345612   |
| CODE3  |  LEV1    |  LEV2    |  LEV3    |   456123   |

我需要在Level3列中查找单词“Term”,然后排除具有相同CODE的每一行。

因此,在上面的示例中,查询将从结果中排除第2行和第3行。

如果不清楚,请告诉我。

1 个答案:

答案 0 :(得分:5)

您可以使用NOT EXISTS排除level3值和code相同的记录:

select *
from yourtable t1
where not exists (select *
                  from yourtable t2
                  where level3 = 'Term'
                   and t1.code = t2.code)

请参阅SQL Fiddle with Demo

结果:

|  CODE | LEVEL1 | LEVEL2 | LEVEL3 | SEC_ID |
---------------------------------------------
| CODE1 |   LEV1 |   LEV2 |   LEV3 | 123456 |
| CODE3 |   LEV1 |   LEV2 |   LEV3 | 456123 |