【问题标题】:Joining two queries having same kind of joins连接两个具有相同类型连接的查询
【发布时间】:2017-03-09 15:29:02
【问题描述】:

我有两个问题。两者仅在一个连接条件上有所不同。有没有办法让它成为一个单一的查询。下面是查询。

第一个查询:

delete from Employee where Employee_ID in    
  (    
    select PK from Dept    
     inner join Tran on Tran.PK = Dept.TX_ID   
        inner join TASK on TASK.TRANSINFO = TRAN.PK_ID   
        inner join TASK1 on TASK.PT_ID = TASK1.PK_ID  
           inner join TASKSUB on TASKSUB.PK_ID = TASK1.SUBJECT   
  where TASKSUB. PK1 in (select id  from tmp) and TASKSUB.REF= ‘Shopping’
  );

第二次查询:

    delete from Employee where Employee_ID in   
      (   
  select PK from Dept   
    inner join Tran on Tran.PK = Dept.TX_ID   
     inner join TASK on TASK.TRANSINFO = TRAN.PK_ID   
      inner join TASK1 on TASK.PT_ID = TASK1.PK_ID   
         inner join TASKSUB on TASKSUB.PK_ID = TASK1.SUBJECT   
  where TASKSUB. PK1 in (select id1  from tmp) and TASKSUB.REF= ‘Shopping’   
  );

唯一的区别是tmp表中的id和id1。

提前致谢

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    也许在 id 和 id1 的子选择中使用UNION。像

    select id from table1 
    union 
    select id1 from table1
    

    【讨论】:

      【解决方案2】:
      delete from Employee where Employee_ID in    
      (    
      select PK from Dept    
       inner join Tran on Tran.PK = Dept.TX_ID   
          inner join TASK on TASK.TRANSINFO = TRAN.PK_ID   
          inner join TASK1 on TASK.PT_ID = TASK1.PK_ID  
             inner join TASKSUB on TASKSUB.PK_ID = TASK1.SUBJECT   
      where TASKSUB. PK1 in (select id from tmp union all select id1 from tmp) and TASKSUB.REF= ‘Shopping’
      )
      

      【讨论】:

        【解决方案3】:

        试试这个:

        delete from Employee where Employee_ID in    
        (    
            select PK from Dept    
            inner join Tran on Tran.PK = Dept.TX_ID   
            inner join TASK on TASK.TRANSINFO = TRAN.PK_ID   
            inner join TASK1 on TASK.PT_ID = TASK1.PK_ID  
            inner join TASKSUB on TASKSUB.PK_ID = TASK1.SUBJECT   
            where TASKSUB. PK1 in (select id  from tmp) and TASKSUB.REF= ‘Shopping’
        
            union
        
            select PK from Dept   
            inner join Tran on Tran.PK = Dept.TX_ID   
            inner join TASK on TASK.TRANSINFO = TRAN.PK_ID   
            inner join TASK1 on TASK.PT_ID = TASK1.PK_ID   
                inner join TASKSUB on TASKSUB.PK_ID = TASK1.SUBJECT   
            where TASKSUB. PK1 in (select id1  from tmp) and TASKSUB.REF= ‘Shopping’
          );
        

        【讨论】:

          【解决方案4】:

          这个怎么样?

          where EXISTS (
                  select 1 from tmp 
                  where TASKSUB.PK1 = tmp.id or TASKSUB.PK1 = tmp.id1
              ) and 
              TASKSUB.REF= ‘Shopping’  
          

          【讨论】:

            猜你喜欢
            • 2018-12-18
            • 2016-07-22
            • 2022-10-05
            • 1970-01-01
            • 2012-05-12
            • 1970-01-01
            • 2019-08-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多