需要帮助将两个功能的mysql查询合并为一个?

时间:2014-10-05 00:26:50

标签: mysql database

我有这个查询将返回与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亿个关联,因此任何一个查询的速度都会受到极大的欢迎。

2 个答案:

答案 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}

应该这样做。