我有一个具有以下结构的表:
id | property_id | location_type
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 3 | 2
5 | 4 | 1
6 | 4 | 2
id - 是表的主键。 property_id是我的数据库(外键)的属性ID。 location_type是beach(value - 1),mountain(value - 2)
是否可以帮助我获取SQL查询以选择property_id,其中location_type = 1 AND location_type = 2,即属性有沙滩和山脉。
我有很多过滤器(大约9种类型的location_type和其他过滤器)。我正在创建一个带过滤器的属性搜索引擎。请帮助获得最优化的查询,以便加载时间更短。
答案 0 :(得分:8)
select
property_id
from table
where location_type in (1,2)
group by property_id
having count(distinct(location_type)) = 2
如果您没有重复项,则可以删除distinct子句。
答案 1 :(得分:3)
自联接将消除对子查询的需要,尽管这并不意味着它会更快;正常的分析规则适用:
SELECT table1.property_id
FROM table table1
INNER JOIN table tabel2 ON table1.property_id = table2.property_id
WHERE table1.location_type = 1
AND table2.location_type = 2