我有三个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 tsID
与paID
相关联。
acID=1
试图将两者放在一个查询中......
SELECT Count(paID) AS paCount FROM patient WHERE paAccountID=1
SELECT Count(tsID) AS tsCount FROM test WHERE tsAccountID=1
不能那样工作,两个Counts都返回6.如何正确?
答案 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])作为字段..