2012-07-10 43 views
0

sql查詢我有一個表只包括兩列:需要簡化與「計數」功能和「IN」操作

ObjectID||PropertyID 

任務:讓所有的ObjectID蒙山物業ID ==(P1和P2 P3和...)。

我解決了這個任務:

SELECT * 
    FROM ( 
     SELECT SD.ObjectID ObjectID, 
       count(SD.ObjectID) countMatchingProperties 
      FROM table AS SD 
     WHERE SD.PropertyID IN (P1, P2, P3, ..., Pn) 
     GROUP BY ObjectID 
    ) 
    AS C 
WHERE C.countMatchingProperties > n-1 

但我沒有離開一個念頭,這個任務是可以解決的方便和快捷。

+0

表中有兩行?或者你的意思是兩列? – 2012-07-10 14:01:31

回答

0
select ObjectID 
from table 
where PropertyID in (P1, P2, P3, P4) 
group by ObjectID 
having count(distinct PropertyID) = 4 

計數(例如,4)必須唯一值的數量在IN條款相符。

+0

Downvoter謹慎解釋? – RedFilter 2012-07-10 16:39:07

+0

我也想聽到解釋:檢查兩個答案,他們工作正確,但我選擇使用這個,因爲它更短 – Mitrodan 2012-07-14 12:35:15

1
SELECT SD.ObjectID ObjectID, 
count(SD.ObjectID) countMatchingProperties 
FROM table AS SD 
WHERE SD.PropertyID IN (P1, P2, P3, ..., Pn) 
GROUP BY ObjectID 
having count(SD.ObjectID) > n-1