Соединение нескольких столов слева - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь выяснить SQL-запрос для извлечения данных из нескольких таблиц одновременно.У меня есть таблица со списком компаний.У меня есть две другие таблицы, содержащие сообщения от каждой компании.В настоящее время я перебираю каждую строку компании и затем выполняю запрос для каждой таблицы связи.Я пробовал запрос как:

SELECT c.*, 
       count(e.id) AS ecount, 
       count(p.id) AS pcount 
FROM companies c 
LEFT JOIN emails e 
  ON c.id = e.company 
LEFT JOIN push p 
  ON c.id = p.company

Но результаты для этого запроса содержат только одну компанию и не учитываются.Как я могу выполнить этот запрос?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019
SELECT c.*, 
       (SELECT COUNT(e.id) FROM emails e WHERE e.company = c.id) as ecount,
       (SELECT COUNT(p.id) FROM push p   WHERE p.company = c.id) as pcount 
FROM companies c 
0 голосов
/ 19 февраля 2019
SELECT c.*, 
       ( SELECT count(e.id) FROM emails WHERE e.company = c.id ) AS ecount, 
       ...
    FROM companies c 
0 голосов
/ 19 февраля 2019

Возможно, вы намереваетесь:

SELECT c.*, 
       count(distinct e.id) AS ecount, 
       count(distinct p.id) AS pcount 
FROM companies c LEFT JOIN
     emails e 
     ON c.id = e.company LEFT JOIN
     push p
     ON c.id = p.company
GROUP BY c.id;

Если предположить, что companies.id является уникальным или первичным ключом, то это правильный способ выразить логику.

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