Как создать запрос с помощью JOIN и WHERE или как сделать их друзьями? - PullRequest
0 голосов
/ 01 мая 2020

Мне нужно сделать запрос, где есть столбцы с именами клиентов и их заказами в месяц. У некоторых клиентов нет заказов в некоторые месяцы, а в полях должно быть 0. Проблема в том, что когда я использую WHERE и OUTER JOIN (независимо от того, какой именно) в одном запросе *, необходимый ноль обрезается WHERE. Так как я могу решить это?

Описание таблиц закреплено.

SELECT name
     , ordering.id_client
     , COUNT(order_date) 
  FROM ordering 
 RIGHT 
 OUTER 
  JOIN client 
    ON client.id_client = ordering.id_client 
 WHERE month(order_date) = 1 
 GROUP 
    BY name;

**Descripton**: (https://i.imgur.com/TrUGOLW.png)

**Example of my query** (there are 6 notes about clients at my db, showed only 4 of 6):

(https://i.imgur.com/ABP6pP0.png)

**MRE stuff**
Client: create table client(id_client int primary key auto_increment, name var char(50), passport_code int, addr varchar(70));
insert into client values(null, 'Penny Anderson', 6485, 'New Orlean');

Ordering: create table ordering(id_order int primary key auto_increment, id_client int, order_date date, foreign key(id_client) references client(id_client));
insert into ordering values(null, 1, date('2020-05-01'));

1 Ответ

0 голосов
/ 01 мая 2020

Попробуйте простое левое объединение, начиная с клиентской таблицы

    SELECT client.name
         , client.id_client
         , COUNT(order_date) 
      FROM client 
     LEFT JOIN  ordering  ON client.id_client = ordering.id_client 
       AND  month(ordering.order_date) = 1 
     GROUP  BY client.id_client;

Если условие объединения связано с левой объединенной таблицей, добавьте это условие в соответствующее предложение ON, а не в то место, где иначе это работает как внутреннее соединение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...