select * 来自 (select * 来自 table)

select * from (select * from table)

我有一个 table 可以记录赞助人是否在其帐户上标记了特定标志。当标志被标记时,它将标志添加到赞助人标志 table,即

patronid   flagnumber   flagvalue
     123          200           1

如果赞助人从未拥有过旗帜,则他们不会在赞助人旗帜中列出 table。

我使用以下查询来查找具有标志 1 但没有标志 2 的顾客。我没有弄清楚的是如何获得赞助人姓名,以便我可以发送报告。 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'
)

我更喜欢使用 group byhaving 找到标志 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 语法。切勿在 from 子句中使用逗号。