2012-07-10 2 views
0

와 SQL 쿼리를 단순화 필요 :나는 두 개의 열로 구성된 테이블이 "계산"기능과 "IN"연산자

ObjectID||PropertyID 

작업 : 모든 부동산 ID == 파크 OBJECTID (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

테이블에 두 행이 있습니까? 아니면 두 개의 열을 의미합니까? –

답변

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

+0

나는 또한 설명을 듣고 싶다 : 두 응답을 모두 확인하고 올바르게 작동하지만 더 짧기 때문에 이것을 사용하도록 선택한다. – Mitrodan

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