반응형
SMALL

2024/03/07 3

오라클 다중 IN MSSQL에서는 EXISTS로 해보자

오라클을 사용하시는분들이 아래 IN절을 사용하다 MSSQL을 사용하게 되면 불편해 하신다. 아래 문장이 도움이 되기를 바란다. SELECT * FROM TEMPA WHERE (A, B) IN ( SELECT A, B FROM TEMPB WHERE C ='Y') DELETE FROM TEMPA WHERE (A, B) IN ( SELECT A, B FROM TEMPB WHERE C = 'Y' ) 위에 SELECT 문을 DELETE로 바꿔서 아주 잘사용하셨다고 한다. 그런데 MSSQL은 어떻게 하나 물어보신다 답은 EXISTS를 사용하시라고 권해 드린다. SELECT A.* FROM TEMPA A WHERE EXISTS ( SELECT 1 FROM TEMPB B WHERE B.A = A.A AND B.B. =..

DB 2024.03.07

DB 정렬 ORDER BY 관련

DB 조회 구문을 만들때 ORDER BY를 사용하다가 아무렇지 않게 실수하는 경우가 있다. 아래 두구문의 같은 값인것 같지만 결과는 다르게 나온다. 왜 그럴까? 그건 바로 DATA 타입 때문이다. 위에 구문은 SEQ가 문자형이고 아래는 숫자형이다. 쿼리에 자신있다고 하다가 결과도 보지 않고 담당자와 이야기 하다가 결과가 이상한데요 라는 부끄러운 결과를 볼수 있다. 자만하지 말고 자신이 만든 쿼리를 항상 테스트 하는 습관을 기르도록 하자 예시1) WITH TMPTABLE AS ( SELECT '1' AS SEQ UNION ALL SELECT '2' AS SEQ UNION ALL SELECT '10' AS SEQ UNION ALL SELECT '11' AS SEQ ) SELECT * FROM TMPTABLE..

DB 2024.03.07

WHERE 조건에 CASE문 처리

사용법만 알면 자주 사용하게 되는것중에 하나가 WHERE 조건에 CASE문을 넣으로 조건에 맞으면 조건절 실행 DECLARE @PARAFLAG VARCHAR(MAX) = 'Y' SELECT AA, BB, CC, DD FROM TEMPTABLE WHERE 1 = CASE WHEN @PARAFLAG = 'Y' THEN 1 ELSE CASE WHEN THEN CC = 'TYPE' ELSE 1 ELSE 0 END END 받은 변수DATA가 Y인경우 CC컬럼의 값이 TYPE인 DATA를 가져옴 Y가 아닌경우 WHERE 조건절은 1 = 1 로 전체 검색을 한다. 사용방법에 따라 유용하게 쓰인다.

DB 2024.03.07
반응형
LIST