我有两个带有StaffID表中StaffDesignation多个记录的表,我需要唯一的值。

select * from StaffMst where StaffID in (select StaffID from StaffDesignation where DesignationID in (6,9))


这意味着两个记录都将出现“或”条件(6或9),但是我需要“和”条件(6和9),如何获得此?

最佳答案

如果我正确理解,这是一个“ set-in-sets”子查询。如果要为所有具有6和9标记的员工记录StaffMst

select m.*
from StaffMst m join
     StaffDesignation sd
     on m.StaffId = sd.StaffId
group by m.StaffId
having sum(sd.DesignationId = 6) > 0 and
       sum(sd.DesignationId = 9) > 0;


Haven子句中的每个条件都在计数一种类型的名称。 > 0表示至少存在一个。因此,以上都检查。

如果需要,可以将and更改为or

select m.*
from StaffMst m join
     StaffDesignation sd
     on m.StaffId = sd.StaffId
group by m.StaffId
having sum(sd.DesignationId = 6) > 0 or
       sum(sd.DesignationId = 9) > 0;

10-04 11:16