我有这个查询将返回与Thomas及其ID相关的所有人的列表。
SELECT c.name, c.ID
FROM namesandID s, associations o, namesandID c
WHERE s.name='Thomas' AND o.id = s.ID AND o.associateID = c.ID
GROUP BY c.ID;
然后我有这个查询,我可以手动输入身份证号码,它将返回正确的员工数。
SELECT count(*) FROM (
SELECT associateID FROM associations WHERE id=18827 GROUP BY associateID
) AS t;
我的目标是让一个查询以托马斯作为名称,并返回三个列,这些列将使其关联者的身份编号与他们关联的人数相符。
另外,作为一些额外信息,这是一个非常大的数据库,拥有大约400万行和3亿个关联,因此任何一个查询的速度都会受到极大的欢迎。
答案 0 :(得分:1)
未经测试,但以下情况应该有效:
select
c.name,
c.id,
assoc_count.cnt
from
namesandIds s
inner join
associations o on
o.id = s.ID
inner join
namesandId c on
c.ID = o.associateId
left outer join
(
select
id,
count(distinct associateId) as cnt
from
associations
group by
id
) assoc_count on
assoc_count.id = c.ID
where
s.name = 'Thomas'
答案 1 :(得分:0)
不是很有效但是
SELECT c.name, c.ID, COUNT(DISTINCT o.associateID)
FROM {the rest of the first query}
应该这样做。