2013-10-01 5 views
0

У меня есть таблица пользователей и таблица заказов в моей базе данных MySQL. Один пользователь может иметь много заказов.Как считать клиентов без заказов?

Я пытаюсь найти количество пользователей, которые никогда не разместили заказ, и пытались вариации этого:

// Incorrect query 
SELECT count(u.id) 
FROM user AS u 
WHERE count(u.o) = 0 
LEFT OUTER JOIN order AS o 
ON o.user_id = u.id 
; 

Что такое правильный способ сделать это?

+0

вы можете включить структуры таблицы в вопросе или создать SQL скрипку? –

ответ

4
SELECT COUNT(id) FROM user WHERE id NOT IN (SELECT user_id FROM order); 

Это простой и действенный; он дает вам все id от user, которые не находятся в order (т. е. никогда не размещали один).

+0

OP хочет количество пользователей ..... –

0

Вы можете использовать NOT EXISTS как:

SELECT COUNT(ID) FROM USER 
    WHERE NOT EXISTS (SELECT USER_ID FROM ORDER); 
0

Вы можете сделать это с помощью left join:

SELECT count(u.id) 
FROM user AS u 
LEFT OUTER JOIN order AS o 
    ON o.user_id = u.id 
WHERE o.user_id IS NOT NULL 
Смежные вопросы