2015-11-03 3 views
0

Я хочу, чтобы не показывать, если дубликат id_customer на моем запросе,MySQL Query не показывать дублированный идентификатор

SELECT 
    ps_orders.id_customer, 
    ps_customer.firstname, 
    ps_customer.lastname, 
    ps_customer.email, 
    ps_orders.total_paid 
FROM 
    ps_orders 
    RIGHT JOIN ps_customer 
     on ps_orders.id_customer = ps_customer.id_customer 
WHERE 
    ps_orders.total_paid > 1 
GROUP BY 
    ps_orders.id_customer; 

Я делаю с помощью «группы по», но он не показывает. Я хочу, чтобы это обыкновение показывать хоть что-то, что группа по

Показаны как этот

id_customer firstname lastname email total_paid 
-------------------------------------------------------- 
55 name8 name10 ***@windowslive.com 88.90 
58 name6 name7 ****@hotmail.com 78.90 
59 name3 name5 ****@hotmail.com 123.83 
60 name name2 ****@hotmail.com 78.90 

Первый запрос был, как это,

SELECT 
    ps_orders.id_customer, 
    ps_customer.firstname, 
    ps_customer.lastname, 
    ps_customer.email, 
    ps_orders.total_paid 
FROM 
    ps_orders 
    RIGHT JOIN ps_customer 
     on ps_orders.id_customer = ps_customer.id_customer 
WHERE 
    ps_orders.total_paid > 1 
ORDER BY 
    ps_orders.id_customer; 

Без группы по

id_customer firstname lastname email total_paid 
-------------------------------------------------------- 
55 name8 name10 ***@windowslive.com 88.90 
58 name6 name7 ****@hotmail.com 56.00 
58 name6 name7 ****@hotmail.com 87.90 
58 name6 name7 ****@hotmail.com 79.99 
58 name6 name7 ****@hotmail.com 78.90 
59 name3 name5 ****@hotmail.com 123.83 
60 name name2 ****@hotmail.com 78.90 

Но я хочу чтобы увидеть так:

id_customer firstname lastname email total_paid 
-------------------------------------------------------- 
55 name8 name10 ***@windowslive.com 88.90 
59 name3 name5 ****@hotmail.com 123.83 
60 name name2 ****@hotmail.com 78.90 
+0

вы могли бы разместить какой результат у вас сейчас, и то, что ожидаемый результат? – Alex

+0

@Alex, пожалуйста, проверьте его снова. – ZgrKARALAR

+0

, и какой из них ОЖИДАЕТСЯ? – Alex

ответ

2

Попробуйте это:

SELECT 
    ps_orders.id_customer, 
    ps_customer.firstname, 
    ps_customer.lastname, 
    ps_customer.email, 
    ps_orders.total_paid 
FROM 
    ps_orders 
    JOIN ps_customer 
     on ps_orders.id_customer = ps_customer.id_customer 
WHERE 
    ps_orders.total_paid > 1 
    AND ps_orders.id_customer IN ( SELECT ps_orders.id_customer 
            FROM ps_orders 
            GROUP BY ps_orders.id_customer 
            HAVING COUNT(1) < 2) 
+0

Я думаю, что это то, что означал OP (у меня была другая интерпретация). Я бы пошел с твоим ответом. Просто обратите внимание, что 'right join' действует как' inner' becaue условия 'total_paid'. – trincot

+0

@ trincot - Исправлен мой запрос. Я не обращал много внимания на выбранные переменные, был просто сосредоточен на устранении customer_id со счетом выше 1 :) – singhsac

+0

Я удалю свой ответ, ваш лучше :) – trincot

1

Вы должны проверить HAVING:

http://sqlfiddle.com/#!9/a981f/1

SELECT 
    ps_orders.id_customer, 
    ps_customer.firstname, 
    ps_customer.lastname, 
    ps_customer.email, 
    ps_orders.total_paid 
FROM 
    ps_orders 
    RIGHT JOIN ps_customer 
     on ps_orders.id_customer = ps_customer.id_customer 
GROUP BY 
    ps_orders.id_customer 
HAVING COUNT(*)=1 
+0

Вы не получите _'it не содержится ни в агрегатной функции, ни в GROUP BY clause'_ error ?? – singhsac

+0

@singhsac no У меня нет сообщений об ошибке http://sqlfiddle.com/#!9/a981f/1 – Alex

Смежные вопросы