mysql在一个查询中计算两个表的记录?

时间:2013-02-17 00:16:08

标签: mysql count

我有三个MySQL表:

patient:
    paID, paCode, paAccountID (foreign key)

test
    tsID, tsName, tsPatientID (foreign key), tsAccountID (foreign key)

account
    acID etc.

现在,我想计算链接到特定paID的{​​{1}}和tsID的数量。有acID=1和4 tsIDpaID相关联。

acID=1

试图将两者放在一个查询中......

SELECT Count(paID) AS paCount FROM patient WHERE paAccountID=1
SELECT Count(tsID) AS tsCount FROM test WHERE tsAccountID=1

不能那样工作,两个Counts都返回6.如何正确?

3 个答案:

答案 0 :(得分:4)

我认为假设您的tsId和paId是唯一键,这应该有效:

SELECT Count(DISTINCT t.tsID) AS tsCount, 
    Count(DISTINCT p.paID) AS paCount
FROM account a 
    LEFT JOIN test t ON a.acId = t.tsAccountId
    LEFT JOIN patient p ON a.acId = p.paAccountId
WHERE a.acId = 1

这是SQL Fiddle

请注意:未加入帐户表(并将其用作主表)的问题是,如果测试表或患者表中没有特定帐户ID的数据,则查询将返回0结果对于每一个 - 这可能是不正确的。

答案 1 :(得分:0)

SELECT
    COUNT(DISTINCT tsID) AS tsCount,
    COUNT(DISTINCT paID) AS paCount
FROM
    test
    CROSS JOIN patient
WHERE
    tsAccountID = 1
    AND paAccountID = 1

答案 2 :(得分:-1)

您的join方法返回所有相关的行,因此您的计数将始终返回返回的所有行的数量

在这种情况下,我会在主选择查询中使用(从[Table] Where [id = x])选择count(*)作为[tsCount])作为字段..