2015-06-10 3 views
2

Я пытаюсь выбрать только уникальные письма из своего списка. Вот пример из моей базы данныхMySQL выбрать отдельный без дубликатов

1 [email protected] unpaid newspaper 
2 [email protected] paid magazine 
3 [email protected] unpaid magazine 
4 [email protected] paid magazine 

проблема, если я использую SELECT DISTINCT WHERE оплаты = платный, джон появится. Когда я сделаю платеж = неоплаченный, появится и Джон. Я хочу только выбрать клиентов с хорошей историей платежей (без вскрытия). Как мне разобраться с этим?

ответ

1

Вы также можете использовать sum с выражением payment = 'unpaid', чтобы получить электронные письма, которые не имеют каких-либо записей unpaid

select email 
from table1 
group by email 
having (sum(payment = 'unpaid')) = 0 

DEMO

+1

Спасибо. Это отлично работает. – AndrewTsang

0

Вы можете использовать exists оператор:

SELECT DISTINCT email 
FROM mytable a 
WHERE NOT EXISTS (SELECT * 
        FROM mytable b 
        WHERE a.email = b.email AND b.payment = 'unpaid') 
0

Попробуйте not in с подвыборки:

select * from `table` where payment='paid' and user not in (select user from `table` where payment='unpaid') 
Смежные вопросы