Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询-选择一个唯一的列来比较其他列_Mysql_Optimization - Fatal编程技术网

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个不同的位置类型,需要与其他过滤器嵌套。你能建议解决开销问题吗?