Как внутреннее объединить 2 таблицы и сложить третье - PullRequest
0 голосов
/ 29 июня 2019

У меня проблема с запросом mysql с 3 таблицами.Я должен напечатать идентификатор пользователя (в таблице пользователей) время запроса, представленное в таблице book_request, и суммировать книгу, купленную на другом столе

select 
    U.id AS ID, 
    B.time_request AS Time,
    (select SUM(volume) from book_buyed O where O.user_id = 62) as BookBuyed 
 from book_request B 
 inner join users U on B.id_cliente = U.id

с этим кодом, это работает, но я должен выбратьвручную идентификатор

, если я использую этот код

select 
    U.id AS ID, 
    B.time_request AS Time,
    (select SUM(volume) from book_buyed O where O.user_id = U.id) as BookBuyed 
 from book_request B 
 inner join users U on B.id_cliente = U.id

, если я использую этот код, результат столбца BookBuyed каждый раз нуль

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Вы можете использовать left join с group by предложением

select 
      U.id AS ID, 
      B.time_request AS Time,
      sum(volume) as BookBuyed 
 from users U 
 left join book_request B on B.id_cliente = U.id
 left join book_buyed O on O.user_id = U.id
group by U.id, B.time_request;

вместо использования подзапроса.

Демо

0 голосов
/ 29 июня 2019

Я всегда старался избегать запросов выбора, встроенных в список выбора другого запроса:

select 
  U.id AS ID, 
  B.time_request AS Time,
  Bookbuyed.sumvol
from 
  book_request B 
  inner join users U on B.id_cliente = U.id
  inner join (select user_id, SUM(volume) sumvol from book_buyed group by user_id) as BookBuyed on u.id = bookbuyed.user_id

Выполнение их в области соединения помогает мне лучше сегментировать их в «блок данных, который соединен с другими блоками данных»; здесь вы можете представить, что сначала вычисляется суммарный объем, а затем результирующие данные этого подзапроса передаются в другие объединения, как если бы это была таблица

...