日期:2014-05-17  浏览次数:20662 次

oracle 数据库中如何实现下面的查询啊!!
假如我有一张表 表名为 u 此表中有以下字段 id(自增长),wid(告警ID),Uid(用户ID),dt(开始时间),enddt(结束时间) 

 wid,uid都是整型的,存在另外一张表,现在用户uid=(277,278,288,299...n),wid=(1,2,3,4,5....n)[这个长度是有限的]
  现在有这样的需求

   用过用户ID,告警ID,开始时间与结束时间查询出数据来,告警ID的条件不是wid in (1,2,3,4,5,....n) 而是说某个用户他的即包含wid=1又要包含wid=2的才允许查出来信息,应该怎么样写查询语句?

------解决方案--------------------
输入格式: 用户1 =288 ,警告号='3,4,5'

with tmp_table as
(select wid from u t2 where t2.uid = 用户1)

select * from u t1
where t1.uid = 用户1
and not exists (  
                  select 1 from 
                  (
                      select regexp_substr(警告号,'[^,]+',1,level)  wid from dual connect by level<=
                        (select length(警告号)-length(replace(警告号,',')) from dual)+1 
                   ) t4  
                  where  not exists ( select 1 from tmp_table t5 where t5.wid=t4.wid )
                );