2017-12-29 32 views
3

A이 비어 있지 않으면 하나의 조건을 추가해야하며 비어있는 경우 다른 조건을 추가해야합니다. 이런 식으로 뭔가 : 이것을 달성하기 위해 다른 방법이이 같이사례 조건에 따라 where 절에 다른 조건 추가

select * 
from table t 
where case when len(t.A) > 0 then t.A = (select B from anothertable) 
     else t.C = (select D from anothertable) 

하지 컴파일을하지, 난 WHEREIF 절을 사용할 수없는 이유는 무엇입니까?

우리는 WHERE 절에 로그인을 바꿔 수

답변

5

는 그것이 작동되도록하려면 다음과 같은 경우 더 레코드 하나 이상의 anothertable 반환에 서브 쿼리는,이 쿼리가 오류가 밖으로한다면

SELECT * 
FROM table_t 
WHERE 
    (LEN(t.A) > 0 AND t.A IN (SELECT B FROM anothertable)) OR 
    (LEN(t.A) <= 0) AND t.C IN (SELECT D FROM anothertable)); 

이 @HoneyBadger에 의해 코멘트를 해결하기 위해 우리는 t.A = (subquery)을 사용했습니다. equals를 사용하려는 경우 하위 쿼리가 단일 레코드 만 반환하는지 확인해야합니다. WHERE IN을 사용하라는 제안은 문제를 해결할 수 있습니다.

+0

글쎄, 그게 내가 원하는 것 같아. 고마워 친구! – nikname

+0

예, 실제로't.A IN (SELECT B FROM anothertable) ... '을 사용하려고합니다. 감사 – nikname