我有一张表,记录顾客是否在其帐户上标记了某个标志。当标记被标记时,它将标志添加到patronflag表,即
patronid flagnumber flagvalue
123 200 1
如果顾客从未有过这面旗帜,他们就没有列在顾客表格中。
我使用以下查询来查找标志为1而不是标志2的顾客。我未能弄清楚的是如何获得patronfirst和patronlast名称以便我可以发送报告。 patronid是主要的,而patronfirst和patronlast是领域。
select getpik(patronid) from
(
Select pf.patronid from patronflags pf, pers p where pf.patronid = p.id_pers and pf.flagnumber = '2'
minus
Select pf.patronid from patronflags pf, pers p where pf.patronid = p.id_pers and pf.flagnumber = '2'
)
答案 0 :(得分:3)
我更喜欢使用group by
和having
找到标志为1但不是标志2的顾客:
select pf.patronid
from patronflags pf
group by pf.patronid
having sum(case when pf.flagnumber = '1' then 1 else 0 end) > 0 and
sum(case when pf.flagnumber = '2' then 1 else 0 end) = 0
您可以将其用作子查询,并加入人员信息:
Select p.*
from (select pf.patronid
from patronflags pf
group by pf.patronid
having sum(case when pf.flagnumber = '1' then 1 else 0 end) > 0 and
sum(case when pf.flagnumber = '2' then 1 else 0 end) = 0
) pf join
pers p
on pf.patronid = p.id_pers ;
您应该学习正确的join
语法。切勿在{{1}}子句中使用逗号。