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