假设它是一个销售照片相机的网站。这是我的实体(表格):
Camera: A simple camera
Feature: A feature like: 6mp, max resolution 1024x768,
事情是在相机和功能之间我有一个多对多的关系,所以我有一个额外的表:
camera -> cameras_features -> feature
所以,查询很简单:
如何获得所有具有功能 1,2 和 3 的相机?
这就像构建位图索引。
可用于测试解决方案是否正常的数据
C1 has features 1,2,3
C2 has features 1,2,4
C3 has features 1,2
以下是查询和预期结果:
- 显示所有具有功能 1,2 和 3 的相机: C1
- 显示所有具有功能 1,2 和 4 的相机: C2
- 显示所有具有功能 1 和 2 的相机: C1、C2和C3
这是我所做的(它有效,但它真的很难看,不想使用它):
SELECT * FROM camera c
WHERE c.id IN (
(SELECT c.id FROM camera c JOIN cameras_features f ON (c.id=f.camera_id)
WHERE f.feature_id=1)
q1 JOIN -- simple intersect
(SELECT c.id FROM camera c JOIN cameras_features f ON (c.id=f.camera_id)
WHERE f.feature_id=2)
q2 JOIN ON (q1.id=q2.id)
)