어떤 테이블에서 값을 조회를 하는데요.
프로야구팀 TABLE
롯데
삼성
기아
값이 들어 있는데....
제가 값을
롯데, 두산, 삼성, 기아
로 넣었을때
프로야구 TABLE에 없는 값을 뽑고자 합니다.
결과값으로 두산
이 나오게 하려면 어떻게 해야 할까요?
조회를 하다 보니 제가 원하는 것에 대한 답변이 있던데요. 아래의 것은 2008이상에만 되는 것 같습니다.
mssql 2005 에서는 안되더라구요.
WITH TBLA (ID,NUM,VAL) AS
(
SELECT '4605','1300','100001' UNION ALL
SELECT '4606','1100','100002' UNION ALL
SELECT '4607','0501','100006' UNION ALL
SELECT '4608','1100','100008'
)
SELECT A.ID, B.NUM, B.VAL
FROM
(VALUES ('4605'),('4606'),('4607'),('111')) A (ID)
LEFT OUTER JOIN TBLA B
ON B.ID = A.ID
Comment 2
-
vible
2017.01.04 14:24
-
jude
2017.01.04 17:28
원문을 보면"(VALUES ('4605'),('4606'),('4607'),('111')) A (ID)" 이렇게 하는걸로 봐서코딩으로 쿼리를 동적으로 만들려는것 같습니다.(동적쿼리가 아니라)동적으로 쿼리를 만들지 않고, 입력되는 값을 한번에 받아서 처리하는 방식으로 해봤습니다.단,조건값으로 입력되는 값들이 콤마로 구분된다고 가정했습니다.들어온 이 문자들을 SPLIT하는 방법에는 재귀호출을 이용한 방법도 있으나,이번에는 좀 특이하게 해봤습니다.또한,SQL SERVER 2005에서는 LAG() 함수를 지원하지 않는군요..안타깝게도..해서,LAG함수 방식으로 구현해봤습니다.참고해보시면 좋을것 같습니다.DECLARE @except_str VARCHAR(100)SET @except_str ='4605,466,11113'; /*콤마로 구분되어서 들어온다...고 가정함*/WITH TBLA (ID,NUM,VAL) AS(SELECT '4605','1300','100001' UNION ALLSELECT '466','1100','100002' UNION ALLSELECT '47','0501','100006' UNION ALLSELECT '4609998','1100','100008'),SPLIT_STR AS(SELECT ROW_NUMBER() OVER(ORDER BY NO) RN,NOFROM (SELECT SUBSTRING(@except_str+',',number + 1,1) str,number + 1 NOFROM master.dbo.spt_valuesWHERE type ='P'AND number < LEN(REPLACE(@except_str+',',' ',''))) AWHERE STR =','),LAG_STR AS(SELECT A.RN,ISNULL(B.NO,0) START_POSITION,A.NO END_POSITIONFROM SPLIT_STR A LEFT OUTER JOIN SPLIT_STR B ON (A.RN -1 = B.RN))SELECT SUBSTRING(@except_str,START_POSITION + 1, END_POSITION - START_POSITION - 1) AS '니가 찾는게 이거냐?'FROM LAG_STR AWHERE NOT EXISTS(SELECT 'X'FROM TBLAWHERE SUBSTRING(@except_str,A.START_POSITION + 1, A.END_POSITION - A.START_POSITION - 1) = ID);
create table [test].[dbo].[a]
(name varchar(50))
insert into [test].[dbo].[a]
values ('a'),('b'),('c')
select * from [test]..[a]
select 'c'
except (select name FROM [test].[dbo]].[a])
> 0 row
select 'c'
except (select name FROM [test].[dbo]].[a])
> d
다만 검색하려는 값을 위에 select에다 넣는데 한 가지 값밖에 안 들어가네요
그 부분은 커서를 이용해야할 것 같아요