SQL 不同列的联合

SQL Union with differing columns

您好,我不确定提出这个问题的最佳方式,但我已经成功 运行 两个 SQL 查询,分别检索了我正在搜索的结果。但是,我想基本上将两个结果附加/连接在一起,但由于我对 SQL 还很陌生,所以我不确定要使用哪种方法。我试过 Union 但这不起作用,因为两个 table 都需要相同数量的列。还尝试了 left join 但这给了我一个一般的语法错误(可能代表我,我又是新手)。

第一个查询

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

第二个查询

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

或者,有人可以帮助我重写这些语句以在一个查询中获得相同的结果。我之前曾尝试过类似的方法并完成了以下操作(但它没有产生正确的输出 - 似乎有相同数量的患者并且所有的名字和姓氏都是来自健康从业者的第一个 table, 但重复):

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

在此先感谢,如果之前已经发布过,我很抱歉,我对此很困惑,不确定如何最好地搜索它。

PS Im 运行ning MySQL Workbench on Windows 如果这有什么不同的话。 山姆

你的第二次尝试是正确的,但它缺少连接条件,而且你应该按 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

尝试以下操作:

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[=14=中指定]