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'