Оператор Sql, извлекающий информацию из двух разных таблиц

#mysql #sql

#mysql #sql

Вопрос:

У меня есть две таблицы, одна из которых называется participants_tb, а вторая называется allocation_tb. В participants_tb у меня есть такие столбцы, как participant_id, name, username. В разделе allocation_tb у меня есть такие столбцы, как allocation_id, sender_username, receiver_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
  

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

Комментарии:

1. Учитывая, что || это недопустимый T-SQL, я удалил тег SQL Server.

2. Хорошо, большое спасибо

Ответ №1:

Кажется, вы хотите:

 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 это более простой способ выразить вашу логику.