简体   繁体   English

mysql选择唯一记录

[英]mysql select unique records

I've got the following query: 我有以下查询:

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

Members pay either their annual subscription once (annual subscription) or they pay 2 times, one in january and one in june (six month subscriptions). 会员支付其年度订阅一次(年度订阅)或支付2次,一次在1月,一次在六月(六个月订阅)。 What i want is to pull the members who paid at least once. 我想要的是拉动至少付过一次的会员。

The statement above will bring some members twice (those who paid both on january and june). 上述声明将使一些成员两次(那些在1月和6月同时付款的人)。

Is is possible to pull the members who paid at least once (no matter if they paid an annual or a six month subscription). 是否可以拉动至少支付一次的会员(无论他们是每年还是六个月的订阅)。 Avoiding duplicates. 避免重复。

使用SELECT DISTINCT,它将只获取您选择的列的唯一值。

Edited Answer 编辑答案

You can do an exists on subscriptions to find the members who have paid at least once for a given year: 您可以在订阅上执行存在以查找在给定年份至少支付一次的成员:

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

All records from members table where each member has at least one subscription: 来自成员表的所有记录,其中每个成员至少有一个订阅:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM