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

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

0 голосов
/ 28 сентября 2018

Привет, я не уверен, как лучше спросить об этом, но я успешно выполнил два 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, если это что-то меняет.Сэм.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

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

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

0 голосов
/ 28 сентября 2018

Ваша вторая попытка находится на правильном пути, но в ней отсутствует условие соединения, а также вы должны группировать по 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
...