MySQL查询-选择一个唯一的列来比较其他列
我有一个具有以下结构的表:MySQL查询-选择一个唯一的列来比较其他列,mysql,optimization,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(外键)。位置类型为海滩(值-1)、山区(值-2) 请您帮助我获取SQL查询
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(外键)。位置类型为海滩(值-1)、山区(值-2)
请您帮助我获取SQL查询,以选择位置为1且位置为2的房产id,即房产有海滩和山脉
我有很多过滤器(大约9种位置类型和其他过滤器)。我正在创建一个带有过滤器的财产搜索引擎。请帮助获取最优化的查询,以缩短加载时间
select
property_id
from table
where location_type in (1,2)
group by property_id
having count(distinct(location_type)) = 2
如果没有重复项,可以删除distinct子句。自连接将消除对子查询的需要,尽管这并不意味着它会更快;正常分析规则适用于:
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
这是否也会选择有两条记录的行,一条记录的
location\u type
值为1,另一条记录的值为3?您要筛选的只是必须有两个不同的location\u type
值,其中一个值必须是1或2。@cdhowie:No,3永远不会被捕获。No。我将搜索限制为特定类型(本例中为1和2)。当应用having子句并计算不同的值时,您将确保所有值都存在。3不会出现,但包含1的记录会出现。OP需要(id,property_id)元组,其中存在位置为1和2的行。感谢您的及时响应和帮助。你能解释一下我需要为无限位置类型和其他过滤器编写的查询吗。谢谢我尝试了同样的逻辑,它也对我有效,但我有大约15个不同的位置类型,需要与其他过滤器嵌套。你能建议解决开销问题吗?