2011-08-13 87 views
2

我有一個表具有以下結構:MySQL查詢 - 選擇一個唯一的列比較其他列

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是海灘(值 - 1),山(值 - 2)

能否請你幫我在得到SQL查詢來選擇與LOCATION_TYPE = 1 AND LOCATION_TYPE = 2,即一個酒店的海灘和山區的PROPERTY_ID。

我有很多過濾器(大約9種類型的location_type和其他過濾器)。我正在創建一個帶有過濾器的財產搜索引擎。請幫助獲取最優化的查詢,以便加載時間更短。

回答

8
select 
property_id 
from table 
where location_type in (1,2) 
group by property_id 
having count(distinct(location_type)) = 2 

如果您沒有重複項,則可以刪除明顯的子句。

+0

這會不會也選擇在有兩個記錄,一個用1'location_type'行,而其他3個?你所要篩選的是必須有兩個不同的'location_type'值,其中一個必須是1或2. – cdhowie

+0

@cdhowie:nope,3永遠不會被捕獲。 –

+0

編號I將搜索範圍限制爲特定類型(本例中爲1和2)。當你申請具有條款並計算不同的值時,你會確定所有都是禮物。 –

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 
+0

我試過同樣的邏輯,它也適用於我,但我有大約15個不同的location_type,它需要與其他過濾器一起嵌套。你能否提出解決這個問題的建議? – dang