3

我有三个 MySQL 表:

patient:
    paID, paCode, paAccountID (foreign key)

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

account
    acID etc.

现在我想计算paID链接tsID到特定acID=1. 有 6tsID和 4paID链接到acID=1.

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

试图将两者都纳入一个查询...

SELECT Count(tsID) AS tsCount, Count(paID) AS paCount
FROM test LEFT JOIN patient ON tsPatientID = paID 
WHERE tsAccountID=1 

那样不行,两个计数都返回 6。如何正确处理?

4

3 回答 3

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 个结果 - - 这可能是不正确的。

于 2013-02-17T00:19:27.620 回答
0
SELECT
    COUNT(DISTINCT tsID) AS tsCount,
    COUNT(DISTINCT paID) AS paCount
FROM
    test
    CROSS JOIN patient
WHERE
    tsAccountID = 1
    AND paAccountID = 1
于 2013-02-17T00:19:24.027 回答
-1

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

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

于 2013-02-17T00:22:36.970 回答