반응형
SQL Server: 존재하는 경우; ELSE
자리가 있습니다A:
ID value
1 100
2 101
2 444
3 501
표 B도 있습니다.
ID Code
1
2
이제 표 A에 ID = 2가 있으면 표 B의 col = 코드를 채우고 싶습니다.여러 값의 경우 최대값을 가져옵니다.그렇지 않으면 '123'으로 입력합니다.이제 제가 사용한 것은 다음과 같습니다.
if exists (select MAX(value) from #A where id = 2)
BEGIN
update #B
set code = (select MAX(value) from #A where id = 2)
from #A
END
ELSE
update #B
set code = 123
from #B
BEGIN;END 또는 IF EXPRESS;ELSE에 문제가 있다고 확신합니다.기본적으로 if-part에 select 문이 있고 그 반대의 경우에는 다른 부분을 바이패스하고 싶습니다.예를 들어, IF=part의 select 문이 다음과 같은 경우:
(select MAX(value) from #A where id = 4)
123만 채워야 합니다. coz ID = 4는 존재하지 않습니다!
편집
나는 당신의 이유를 덧붙이고 싶습니다.IF
문이 작동하지 않는 것 같습니다.당신이 할 때EXISTS
종합적으로 보면, 그것은 항상.true
값을 반환하는 경우에도 값을 반환합니다.ID
존재하지 않습니다.물론입니다.NULL
하지만 그것은 그것을 돌려줍니다.대신 다음 작업을 수행합니다.
if exists(select 1 from table where id = 4)
그러면 당신은 거기에 도착할 것입니다.ELSE
당신의 일부IF
진술.
이제 더 나은 세트 기반 솔루션이 있습니다.
update b
set code = isnull(a.value, 123)
from #b b
left join (select id, max(value) from #a group by id) a
on b.id = a.id
where
b.id = yourid
이는 개별 ID가 아닌 전체 테이블에서 실행할 수 있다는 이점이 있습니다.
사용해 보십시오.
Update TableB Set
Code = Coalesce(
(Select Max(Value)
From TableA
Where Id = b.Id), 123)
From TableB b
원래 게시물이 게시된 지 오래되었다는 것은 알지만 CTE를 사용하는 것을 좋아하고 이것이 저에게 효과가 있었습니다.
WITH cte_table_a
AS
(
SELECT [id] [id]
, MAX([value]) [value]
FROM table_a
GROUP BY [id]
)
UPDATE table_b
SET table_b.code = CASE WHEN cte_table_a.[value] IS NOT NULL THEN cte_table_a.[value] ELSE 124 END
FROM table_b
LEFT OUTER JOIN cte_table_a
ON table_b.id = cte_table_a.id
언급URL : https://stackoverflow.com/questions/7425146/sql-server-if-exists-else
반응형
'programing' 카테고리의 다른 글
간헐적인 SQL 시간 초과 오류 문제 해결 방법 (0) | 2023.07.16 |
---|---|
상위 디렉터리를 가져오는 방법 (0) | 2023.07.16 |
SQL에서 조건부 UPDATE 문 사용 (0) | 2023.07.16 |
PHPExcel 기본 워크시트 이름을 다른 이름으로 변경 (0) | 2023.07.16 |
둘 이상의 필드에 대한 항목에 대한 중복 항목 찾기 Mongo (0) | 2023.07.16 |