SQL Union с разными столбцами

Привет, я не уверен, как лучше всего это задать, но я успешно выполнил два SQL-запроса, которые по отдельности получают результаты, которые я ищу. Однако я хотел бы добавить / объединить в основном два результата вместе, но поскольку я новичок в SQL, я не уверен, какой метод использовать. Я пробовал Union, но это не работает, поскольку для обеих таблиц требуется одинаковое количество столбцов. Также пробовал левое соединение, но это дает мне общую синтаксическую ошибку (может быть, от моего имени, опять же, я новичок в этом).

1-й ЗАПРОС

SELECT prac.healthPracID, prac.firstName, prac.surname
FROM healthpractitioners as prac

2-й ЗАПРОС

select count(treatmentrecords.nickname) as patients
from treatmentrecords
group by treatmentrecords.healthpracID;

В качестве альтернативы, может ли кто-нибудь помочь мне переписать эти утверждения, чтобы добиться того же результата в одном запросе. Я пробовал что-то подобное раньше и сделал следующее (но это не дало правильного результата - казалось, что у меня было такое же количество пациентов, и все имя и фамилия были только первыми из таблицы практикующего врача, но повторялись ):

SELECT prac.healthPracID, prac.firstName, prac.surname, 
count(treatmentrecords.nickname) as patients
FROM healthpractitioners as prac, treatmentrecords
group by treatmentrecords.healthpracID;

Заранее спасибо, извините, если это уже было опубликовано раньше, я очень запутался в этом и не знал, как лучше его искать.

PS Я запускаю MySQL Workbench в Windows, если это имеет значение. Сэм.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша вторая попытка находится на правильном пути, но в ней отсутствует условие соединения, а также вы должны группироваться по healthpractioners#healthPracID.

SELECT
    p.healthPracID,
    p.firstName,
    p.surname,
    COUNT(t.healthPracID) AS num_patients
FROM healthpractioners p
LEFT JOIN treatmentrecords t
    ON p.healthPracID = t.healthPracID
GROUP BY
    p.healthPracID;

В этом ответе предполагается, что healthPracID является либо первичным ключом в healthpractioners, либо имеет уникальный индекс. В этом случае мы можем просто сгруппировать по healthPracID. Если нет, то нам придется использовать следующий GROUP BY:

GROUP BY
    p.healthPracID,
    p.firstName,
    p.surname

Да, я сделал это, и это работает !! СПАСИБО БОЛЬШОЕ!! healthPracID - это первичный ключ, поэтому просто чтобы понять, что вы сделали, это добавили условие соединения и группу по healthpracID в таблице healthpracitioners вместо группировки по healthpracID в таблице treatmentrecords? Еще один вопрос: когда вы используете левое соединение, вы должны указать условие для одинаковых столбцов? почему именно это? Мне немного любопытно, почему.

Sam G 28.09.2018 05:51

Да, это все, что я действительно изменил. Самая большая проблема, с которой вы столкнулись, - это порядок присоединения.

Tim Biegeleisen 28.09.2018 05:52

Еще раз спасибо, как мне отметить вопрос как решенный / лучший ответ?

Sam G 28.09.2018 05:53

Попробуйте следующее:

SELECT prac.healthPracID, prac.firstName, prac.surname,
count(treat.nickname) as patients
FROM healthpractitioners as prac LEFT JOIN treatmentrecords AS treat
ON prac.healthPracID = treat.healthPracID 
GROUP BY prac.healthPracID, prac.firstName, prac.surname

Используйте общие поля из обеих таблиц для выполнения LEFT JOIN, а затем используйте агрегированную функцию COUNT для нужного столбца, а остальные столбцы укажите в GROUP BY.

Другие вопросы по теме