首页 > 解决方案 > sql查询基于where子句中的多列组合并处理'IN'或Not In运算符

问题描述

我需要检查表中的 2 列组合是否为表中的唯一列 ID。示例:我有一个表 TABLE A

----------------------------------
ID      TYPE          VALUE
---------------------------------
1   CUST        1
1   SOLDTO      3
1   SHIPTO      2
2   CUST        1
2   SOLDTO      2
2   SHIPTO      5
3   CUST        1
3   SOLDTO      2
3   SHIPTO      3
----------------------------------

我需要检查条件组合

if ( TYPE = 'CUST' VALUE = 1 ) 
      and ( TYPE = 'SOLDTO' VALUE  IN RANGE 2 to 3 ) 
      and (TYPE = 'SHIPTO' VALUE NOT EQ 3)

应该返回条目

2   CUST        1
2   SOLDTO      2
2   SHIPTO      5

请协助。

标签: sql

解决方案


您可以尝试使用存在和不存在

select * from t where exists
                          ( select 1 from t t1 where t1.ID=t.ID 
                            and t1.TYPE in('CUST','SOLDTO') 
                            and t1.VALUE>=1 and t1.VALUE<=3)
                 and not exists ( select 1 from t t2 where t2.ID=t.ID
                                  and t2.TYPE='SHIPTO' and t2.VALUE!=3)

推荐阅读