MySQL выбрать уникальные записи - PullRequest
3 голосов
/ 15 декабря 2009

У меня следующий запрос:

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 раза, один в январе и один в июне (шестимесячная подписка). То, что я хочу, это вытащить участников, которые заплатили хотя бы один раз.

В приведенном выше утверждении некоторые участники будут дважды (те, кто заплатил как в январе, так и в июне).

Можно вывести участников, которые заплатили хотя бы один раз (независимо от того, заплатили ли они годовую или шестимесячную подписку). Избежание дубликатов.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2009

Отредактированный ответ

Вы можете создать подписку, чтобы найти участников, которые хотя бы раз заплатили за данный год:

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 голосов
/ 15 декабря 2009

Используйте SELECT DISTINCT, который получит только уникальные значения выбранных вами столбцов.

1 голос
/ 15 декабря 2009

Все записи из таблицы участников, где у каждого участника есть хотя бы одна подписка:

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
...