根据角色ID从表中提取数据

时间:2019-08-21 09:26:24

标签: sql oracle plsql

对于那些角色分别为-21和-24的员工,我必须从表中过滤记录。
 EX:在示例emp_id 2中,它的角色定义为-21和-24。这需要过滤掉。

输入数据:

 EMP_ID   ROLE_ID
 1        -21
 1        -31
 1        -81
 2        -21
 2        -24
 3        -24
 3        -31
 3        -42

预期产量

 EMP_ID  ROLE_ID
 1        -21
 1        -31
 1        -81
 3        -24
 3        -31
 3        -42

3 个答案:

答案 0 :(得分:1)

以下是一种可能性:

SELECT *
  FROM DAT d
 WHERE emp_id NOT IN (SELECT emp_id
                        FROM dat
                       WHERE role_id IN (-21,-24)
                       GROUP BY emp_id
                       HAVING COUNT(*) = 2)

提供您的数据:

WITH dat (emp_id, role_id) AS ( select 1,        -21 from dual union all
                                select 1,        -31 from dual union all
                                select 1,        -81 from dual union all
                                select 2,        -21 from dual union all
                                select 2,        -24 from dual union all
                                select 3,        -24 from dual union all
                                select 3,        -31 from dual union all
                                select 3,        -42 from dual)
SELECT *
  FROM DAT d
 WHERE emp_id NOT IN (SELECT emp_id
                        FROM dat
                       WHERE role_id IN (-21,-24)
                       GROUP BY emp_id
                       HAVING COUNT(*) = 2)

它有助于:

EMP_ID  ROLE_ID
1        -21
1        -31
1        -81
3        -24
3        -31
3        -42

根据需要。

答案 1 :(得分:0)

您可以通过多种方式(分组,不存在等)来实现。我认为最快的方法是分析count():

$(document).ready(function() {
  $('#validProduct').on("click", function(e) {
     ......
    $.ajax({
        type : "POST",
        contentType : "application/json",
        url : "./addProduct",
        data : JSON.stringify(product),
        dataType : 'json',
        timeout : 6000,
        success : function(data) {
         /* **reload listProducts** */
        }
    });
  });
});

demo

答案 2 :(得分:0)

请尝试以下查询:

select * from Y where emp_id in (select  emp_id from(
select emp_id, count(emp_id) c from Y where role_id in ('-21','-24') 
group by emp_id) where c != 2
);

Output