MySQL查询 - 选择比较其他列的唯一列

时间:2011-08-13 21:12:32

标签: mysql optimization

我有一个具有以下结构的表:

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和其他过滤器)。我正在创建一个带过滤器的属性搜索引擎。请帮助获得最优化的查询,以便加载时间更短。

2 个答案:

答案 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