首页 > 解决方案 > SQL - 如果有对,则避免选择

问题描述

是否可以为这种情况编写 MS SQL 查询?如果有一对 1 和 -1 ,我根本不想选择这些条目。

COL1 COL2 笔记
一个 1 我不想选择此条目,因为它与 A -1 配对
一个 -1 我不想选择此条目,因为它与 A 1 配对
一个 1 可以选择 - 没有对(这个 A 没有 -1 )
1 可以选择 - 没有配对
C 1 可以选择 - 没有配对
D 1 我不想选择此条目,因为它与 D -1 配对
D -1 我不想选择此条目,因为它与 D 1 配对

标签: sqlsql-server

解决方案


一种方法是聚合。假设只有 -1 和 1 并且没有具有相同符号的重复项:

select col1, max(col2), col3
from t
group by col1, col3
having count(*) = 1;

或者,您可以使用 `not exists:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.col3 = c.col3 and t2.col1 = t.col1 and
                        t2.col2 = - t.col1
                 );

推荐阅读