Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个内部联接的SQL查询将抛出计数_Sql_Ruby On Rails - Fatal编程技术网

具有两个内部联接的SQL查询将抛出计数

具有两个内部联接的SQL查询将抛出计数,sql,ruby-on-rails,Sql,Ruby On Rails,我正在rails应用程序中设置一个查询,只查看至少有3家认可保险提供商的care_提供商 上面的问题是查询应该如何工作。它只返回“提供者1”,因为其他提供者只有不到3个可接受的保险提供者 当然,我还需要对查询设置许多其他条件,这些条件需要与其他表进行内部联接。一旦我添加了一个额外的内部连接,我的计数就会被抛出,我会让提供者通过我的havingcount标准,而这是不应该的 你可以从这把小提琴上看到“提供者1”现在显示的是6,而“提供者2”显示的是4 你有没有想过我该如何构造这个来获得我需要的

我正在rails应用程序中设置一个查询,只查看至少有3家认可保险提供商的care_提供商

上面的问题是查询应该如何工作。它只返回“提供者1”,因为其他提供者只有不到3个可接受的保险提供者

当然,我还需要对查询设置许多其他条件,这些条件需要与其他表进行内部联接。一旦我添加了一个额外的内部连接,我的计数就会被抛出,我会让提供者通过我的havingcount标准,而这是不应该的

你可以从这把小提琴上看到“提供者1”现在显示的是6,而“提供者2”显示的是4


你有没有想过我该如何构造这个来获得我需要的计数?另外,如果有一种简单的方法可以在ActiveRecord中将其作为作用域处理,我将接受一个SQL回答。

解决这个问题的快捷方法可能是使用
count(distinct)


问题是要加入的其他表有多个匹配项。这会将行数相乘,然后抛出count

你是我的英雄!我知道必须有一个简单的解决办法。
SELECT `care_providers`.id, name, COUNT(`accepted_insurance_providers`.insurance_provider_id)
  FROM `care_providers`
  INNER JOIN `accepted_insurance_providers` ON `care_providers`.id = `accepted_insurance_providers`.care_provider_id
  GROUP BY `care_providers`.id
  HAVING COUNT(`accepted_insurance_providers`.insurance_provider_id) >=3
  ORDER BY `care_providers`.id ASC
;
SELECT `care_providers`.id, name, COUNT(`accepted_insurance_providers`.insurance_provider_id)
  FROM `care_providers`
  INNER JOIN `accepted_insurance_providers` ON `care_providers`.id = `accepted_insurance_providers`.care_provider_id
  INNER JOIN `care_providers_coverage_zip_codes` ON `care_providers_coverage_zip_codes`.care_provider_id = `care_providers`.id 
  GROUP BY `care_providers`.id
  HAVING COUNT(`accepted_insurance_providers`.insurance_provider_id) >=3
  ORDER BY `care_providers`.id ASC
;
HAVING COUNT(DISTINCT accepted_insurance_providers.insurance_provider_id) >= 3