我有以下查询:
select * from members,subscriptions
where members.MemberID = subscriptions.MemberID
and subscriptions.Year = 2009
and members.ASSCID = 15
and subscriptions.Untildate between '$2009-01-01' and '2009-12-31'
order by members.Memberlastname
会员支付其年度订阅一次(年度订阅)或支付2次,一次在1月份,一次在6月份(六个月订阅)。我想要的是拉出至少付过一次的会员。
上述声明将使一些成员两次(那些在1月和6月同时付款的人)。
是否有可能拉动至少付过一次的会员(无论他们是否支付了一年或六个月的订阅费用)。避免重复。
答案 0 :(得分:2)
使用SELECT DISTINCT,它只会获得您选择的列的唯一值。
答案 1 :(得分:2)
您可以在订阅上执行存在,以查找在给定年份内至少支付过一次费用的成员:
select * from members
where members.ASSCID = 15 and
exists (select 1 from subscriptions
where members.MemberID = subscriptions.MemberID
and subscriptions.Year = 2009
)
order by members.Memberlastname
答案 2 :(得分:1)
每个成员至少有一个订阅的成员表中的所有记录:
select members.*
from members join
(
select
members.MemberID, count(*)
from members join subscriptions on (members.MemberID = subscriptions.MemberID)
where subscriptions.Year = 2009
and subscriptions.Untildate between '2009-01-01' and '2009-12-31'
group by members.MemberID
having count(*) >= 1
)
v on ( members.MemberID = v.MemberID)
where members.ASSCID = 15