2014-12-18 10 views
0

recid, instituitionid, filename, status 등이 포함 된 테이블이 있습니다.WHERE 절의 SQL server SELECT 절

recid는 기본 키이며 고유합니다.

특정 instituitionid 및 파일 이름을 가진 테이블에서 모든 행을 선택하는 쿼리를 원합니다. 문제는 필자가 입력으로 recid를 가지고 있다는 것입니다. & 2 개의 매개 변수 값은 내가 가지고있는 recid 값인 값과 같습니다.

SELECT * FROM Status 
WHERE instituitionid = (SELECT instituitionid FROM Status WHERE recid = recid) 
AND filename = (SELECT filename FROM Status WHERE recid = recid) 

비록 같은

그것은 될 일이 있는지 많은 PPL이 물어 것입니다, 나는 내 검색에서이 구문을 찾을 수 없습니다.

도와주세요 :)

답변

1

이 작업을 수행 할 수있는 방법이 많이 있습니다 여기에 또 다른 : 당신은 당신이 recid 가치가 있다고 때문에

SELECT * 
FROM Status s 
WHERE EXISTS (
    SELECT 1 
    FROM Status s2 
    WHERE s.institutionid = s2.institutionid 
     AND s.filename = s2.filename 
     AND s2.recid = @recid 

) 

, 내가 치료있어하는 매개 변수로.

이것은 하나의 하위 쿼리 만 수행하는 장점이 있습니다.

+0

감사합니다. Ann! 매력처럼 작동합니다. – Playmaker

4

끝내세요! 이 시도 :

SELECT * 
FROM STATUS 
WHERE instituitionid IN (
     SELECT instituitionid 
     FROM STATUS 
     WHERE recid = recid 
     ) 
    AND filename IN (
     SELECT filename 
     FROM STATUS 
     WHERE recid = recid 
     ) 
+0

감사 록키를 포함하여 모두를 줄 것입니다. 내부 선택 쿼리가 단일 instituitionid 및 파일 이름을 반환 할 것으로 기대합니다. IN이 필요합니까? 사실 내 쿼리가 옳은지 확실하지 않았고, 내가 원하는 것을 논리적 인 예제로 썼습니다. 코드를 단순화하는 방법은?! (실제로 동일한 결과 집합의 다른 열을 반환하는 두 개의 내부 선택을 작성해야합니까? – Playmaker

+0

"IN"대신 "1"행이 반환되므로 "="사용할 수 있지만 @ 어딘가에 숨겨 뒀어? – JBrooks

2

이렇게하면 b.recid = @recid

SELECT b.* 
FROM Status AS a 
INNER JOIN Status AS b 
ON a.instituitionid = b.instituitionid 
AND a.filename = b.filename 
WHERE a.recid = @recid 
+0

당신과 @Ann L.의 답변은 모두 매력처럼 작동합니다. 고마워. 어떤 아이디어가 더 나은 성능 현명/적은 자원을 소비 할 것이라고? – Playmaker

+0

나는 내 생각을 추측 할거야, 아니면 똑같을거야. 이 세 줄을 추가하고 다음을 알려줄 수 있습니다 : @@ starttime datetime; @@ starttime = getdate(); - 여기에 SQL을 실행하십시오; datediff (MILLISECOND, @@ starttime, getdate())를 선택하십시오. (single at sign을 사용하십시오. stackoverflow는 single을 "at user" – JBrooks