Оператор Sql, извлекающий информацию из двух разных таблиц - PullRequest
1 голос
/ 10 марта 2019

У меня есть две таблицы, одна из которых называется members_tb , а вторая называется alloc_tb . На members_tb мои столбцы имеют вид member_id , name , username . В файле alloc_tb мои столбцы имеют вид alloc_id , sender_username , receive_username , done . Столбец done содержит любое из этих трех чисел: 0, 1, 2.

Я использовал этот SQL-оператор для извлечения своих значений

SELECT *, COUNT(done) d
FROM participants_tb 
JOIN allocation_tb ON (username=receiver_username)
WHERE done = 0 || done = 1 
GROUP BY receiver_username

Это сработало очень хорошо, у меня проблема в том, что я хочу, чтобы он также включал информацию об участниках, которые находятся в members_tb, но не в alloc_tb. Я попытался использовать левое внешнее объединение , но оно не сработало так, как ожидалось, потому что я хочу, чтобы оно включало участников, которые находятся только в members_tb, но не в alloc_tb, поскольку done в предложение where находится в alloc_tb, оно не будет включать эту информацию.

1 Ответ

1 голос
/ 10 марта 2019

Вы, кажется, хотите:

SELECT p.*, COUNT(a.done) as d
FROM participants_tb p LEFT JOIN
     allocation_tb a
     ON p.username = a.receiver_username) AND
        a.done IN (0, 1)
GROUP BY p.participant_id;

Примечания:

  • LEFT JOIN сохраняет всех участников.
  • GROUP BY должен быть на первом столе.
  • Вы можете использовать SELECT p.* с GROUP BY - при условии, что ключ GROUP BY является уникальным (или первичным ключом).
  • Все столбцы должны быть квалифицированы.
  • IN - это более простой способ выразить вашу логику.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...