выбрать из двух таблиц с помощью подзапроса

У меня есть база данных с двумя таблицами пользователей и заказов

users: user_id(primary), fname, lname, email, password, gender

orders: order_no(primary), user_id(foriegn), beans, type, extras, city

В таблице заказов есть только пользователи, разместившие заказы.

Мне нужно знать, как выбрать всех пользователей с количеством их заказов, если у них есть заказы или нет.

Дополнительная информация опубликована в качестве ответа....

таблица пользователей:

user_id fname lname email password gender
1        a     aa    aaa  123      m
2        b     bb    bbb  34       f

таблица заказов:

order_no user_id bean type extras city
1         2       s    d    rr     ggg
2         2       s    d     rr     ggg

как выбрать все столбцы таблицы пользователей плюс количество заказов для a и b, чтобы новая таблица была:

user_id fname lname email password gender orders_count
1       a      aa    aaa   123      m      0
2       b      bb    bbb   34       f      2

person bm2001    schedule 03.04.2011    source источник


Ответы (3)


На основании обновленной информации используйте:

   SELECT u.*,
          COALESCE(x.orders_count, 0) AS orders_count
     FROM USERS u
LEFT JOIN (SELECT o.user_id, 
                  COUNT(*) AS orders_count
             FROM ORDERS o
         GROUP BY o.user_id) x ON x.user_id = u.user_id
 ORDER BY u.user_id
person OMG Ponies    schedule 03.04.2011

Ваше обновление в основном запрашивает то, что уже дает вам pcofre. Вам просто нужно добавить дополнительные необходимые столбцы в список select и указать псевдоним столбца для агрегата.

SELECT U.user_id,
       U.fname,
       U.lname,
       U.email,
       U.password,
       U.gender,
       COUNT(O.user_id) AS orders_count
FROM   users U
       LEFT JOIN orders O
         ON U.user_id = O.user_id
GROUP  BY U.user_id  /*<-- Don't need to add other users 
                          columns to GROUP BY in MySQL*/
person Martin Smith    schedule 03.04.2011
comment
фу, полагаясь на эту функциональность MySQL. Верно, но я бы не советовал тем, кто изучает SQL, потому что значения в несгруппированных столбцах будут произвольными. - person OMG Ponies; 04.04.2011
comment
@OMG- Они функционально зависят от user_id. Для group может быть только одно значение - person Martin Smith; 04.04.2011
comment
Обсуждение этого вопроса - person Martin Smith; 04.04.2011
comment
Так вот куда отправился Роланд - хорошо для него. Раньше он был на СО. Да, стандарт ANSI поддерживает интерпретацию MySQL (и SQLite), но другие поставщики этого не делают. Вы смотрите только на этот вопрос, когда у людей, ищущих свой ответ, будет что-то другое. - person OMG Ponies; 04.04.2011

person    schedule
comment
Не публикуйте код с разделителями табуляцией - действительно проблемы с форматированием. - person OMG Ponies; 04.04.2011