Mysql select unique records

I have 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 pay 2 times, one in January and one in June (six-month subscription). I want to pull out members who paid at least once.

The above expression will bring several members twice (those who paid in both January and June).

Is it possible to pull out members who paid at least once (regardless of whether they paid an annual or six-month subscription). Avoid duplicates.

+3
source share
3 answers

All entries from the participants 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
+1
source

SELECT DISTINCT, .

+2

Edited Answer

You can create a subscription for subscribers 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
+2
source

Source: https://habr.com/ru/post/1725705/


All Articles