Activerecord 关联表上的多个反向查找

Activerecord 关联表上的多个反向查找,activerecord,sqlite,Activerecord,Sqlite,我有一张大致像这样的桌子。每个链接可以有任意数量的位置 | link | location | aa | 1 | aa | 2 | aa | 3 | bb | 1 <== location can belong to multiple links | bb | 3 | cc | 4 理想情况下,我会将此数据库端作为SQL查询运行,特别是在sqlite3上的Rails活动记录中,但这并不重要,因为我追求的是一种通用方法,而不是特定的解决方案 我

我有一张大致像这样的桌子。每个链接可以有任意数量的位置

| link | location
| aa   |  1
| aa   |  2
| aa   |  3
| bb   |  1      <== location can belong to multiple links
| bb   |  3
| cc   |  4
理想情况下,我会将此数据库端作为SQL查询运行,特别是在sqlite3上的Rails活动记录中,但这并不重要,因为我追求的是一种通用方法,而不是特定的解决方案

我考虑过group by,但表可能很大,我希望查找速度更快。

使用group by的查询当然很简单:

选择链接 从MyTable 分组链接 计数*等于3的 和COUNTlocation IN 1,2,3=3 为了避免计算所有链接的计数,您可以尝试在第一步中过滤掉没有任何所需位置的链接:

选择链接 从MyTable 选择链接中的链接位置 从MyTable 位置在1,2,3 分组链接 计数*等于3的 和COUNTlocation IN 1,2,3=3 这在实践中是否有帮助取决于实际数据中的值分布。

使用GROUP BY查询当然很简单:

选择链接 从MyTable 分组链接 计数*等于3的 和COUNTlocation IN 1,2,3=3 为了避免计算所有链接的计数,您可以尝试在第一步中过滤掉没有任何所需位置的链接:

选择链接 从MyTable 选择链接中的链接位置 从MyTable 位置在1,2,3 分组链接 计数*等于3的 和COUNTlocation IN 1,2,3=3 这在实践中是否有帮助取决于实际数据中的值分布

given {1}          => no result, null etc.
given {1,2}        => no result, null etc.
given {1, 2, 3}    => result 'aa'
given {3, 2, 1}    => result 'aa'
given {1, 2, 3, 4} => no result, null etc.
given {4}          => result 'cc'