我在StaffID
表中有两个包含多个StaffDesignation
记录的表,我需要唯一的值。
select * from StaffMst where StaffID in (select StaffID from StaffDesignation where DesignationID in (6,9))
表示'或'条件(6或9)两个记录都会来,但我需要'和'条件(6和9),如何得到这个?
答案 0 :(得分:0)
如果我理解正确的话,这就是" set-within-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;
having子句中的每个条件都计算一种指定的数量。 > 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;