sql联合

3ks5zfa0  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(337)

嗨,我不确定问这个问题的最佳方式,但我已经成功运行了两个sql查询,分别检索我正在搜索的结果。不过,我想将这两个结果基本上附加/连接在一起,但由于我对sql还相当陌生,所以我不确定要使用什么方法。我尝试过联合,但这不起作用,因为两个表需要相同数量的列。也尝试了左连接,但这给了我一个普遍的语法错误(可能是代表我,再次我是新手)。
第一个查询

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我在windows上运行mysql工作台,如果这有什么区别的话。山姆。

ztmd8pv5

ztmd8pv51#

您的第二次尝试是在正确的轨道上,但是它缺少一个连接条件,而且您应该按照 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
8ftvxx2r

8ftvxx2r2#

请尝试以下操作:

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

相关问题