适用于此场景的加入/连接?

时间:2017-05-18 09:58:46

标签: oracle

我想把我已经完成的两张桌子加在一起

我还希望根据条件加入它们,其中特定列具有特定值,我也已成功完成此操作。到目前为止,我使用了内连接和where子句。

但是,对于此结果集,我想通过仅选择特定字符串对于一组列出现多次的列来进一步过滤它,例如;

employee_ID和CERTIFICATE

我想分组employee_id有CERTIFICATE count> 2.这是在我使用where子句将表连接在一起之后。

我可能正在考虑在我的WHERE子句中使用子查询(这也是最后一行的第3行)

为了进一步说明,我想只显示证书数量大于2的员工。通过证书,我引用一个带有字符串'证书'在专栏'技能'。换句话说,只选择字符串' Certificate'对于特定的员工ID,显示为TWICE。

1 个答案:

答案 0 :(得分:1)

获得员工ID:

SELECT t1.employee_id
FROM   table1 t1
       INNER JOIN
       table2 t2
       ON ( t1.col1 = t2.col1 )
GROUP BY t1.employee_id
HAVING COUNT( CASE t2.skill WHEN 'CERTIFICATE' THEN 1 END ) > 1

或者,获取所有列:

SELECT *
FROM   (
  SELECT t1.*,
         t2.*,
         COUNT( CASE t2.skill WHEN 'CERTIFICATE' THEN 1 END )
           OVER ( PARTITION BY t1.employee_id )
           AS num_certificate
  FROM   table1 t1
         INNER JOIN
         table2 t2
         ON ( t1.col1 = t2.col1 )
)
WHERE  num_certificate > 1