具有不同列的SQL Union

时间:2018-09-28 03:32:55

标签: mysql sql workbench

嗨,我不确定最好的方法,但是我已经成功运行了两个SQL查询,分别检索了我要搜索的结果。但是,我想将两个结果基本上附加/串联在一起,但是由于我对SQL相当陌生,所以我不确定使用哪种方法。我已经尝试过Union,但是由于两个表都需要相同数量的列,因此无法正常工作。还尝试了左联接,但这给了我一个普遍的语法错误(也许代表我,我还是新来的。)

第一查询

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

第二查询

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 Im在Windows上运行MySQL Workbench(如果有任何区别)。 山姆。

2 个答案:

答案 0 :(得分:3)

您的第二次尝试是在正确的轨道上,但是缺少联接条件,因此您应该按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;

此答案假设healthPracIDhealthpractioners中的主键或具有唯一索引。在这种情况下,我们可以按healthPracID分组。如果没有,那么我们将不得不使用以下GROUP BY

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

答案 1 :(得分:0)

尝试以下操作:

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中指定的其他列