2014-02-07 7 views
1

예제 테이블을 사용할 것입니다.CASE 문을 사용하는 SQL 업데이트

tblAnimal :

--------------------------------- 
|Animal | Colour | Gender | 
--------------------------------- 
|Dog  |  |   | 
--------------------------------- 

tblDescription :

------------------------------- 
| Animal | ID | Description | 
------------------------------- 
| Dog | 1 | Male  | 
------------------------------- 
| Dog | 92 | White  | 
------------------------------- 

그래서 나는 컬러와 성별은 인구가되도록 tblAnimal를 업데이트합니다.

나는 코드
UPDATE tblAnimal 
SET Colour = CASE WHEN tblDescription.ID = 92 THEN tblDescription.Description END, 
    Gender = CASE WHEN tblDescription.ID = 1 THEN tblDescription.Description END 
FROM tblDescription INNER JOIN tblAnimal 
    ON tblDescription.Animal = tblAnimal.Animal 

을 사용하지만 작동하지 않습니다. tblAnimal의 두 열은 모두 NULL로 유지됩니다. SQL Server는 tblDescription의 첫 번째 행만 검사하는 것처럼 보입니다.

색상 및 성별이 모두 tblDescription에 포함되도록이 UPDATE 문을 작성하는 방법은 무엇입니까?

편집

는 솔루션에 대한 여러분 모두 감사합니다! 그리고 예 테이블을 정규화해야하지만 엄격히 예를 들어 UPDATE 문에 대한 내 질문에 따라야합니다.

다시 한 번 감사드립니다.

답변

1
Create table tblDescription(
Animal varchar(20), 
ID int, 
Description varchar(20) 
) 

Insert into tblAnimal(Animal) 
values ('Dog') 

Insert into tblDescription 
Select 'Dog',1,'Male' union all 
Select 'Dog',92,'White' 

Select * from tblAnimal 

Select * from tblDescription 

---Update 

Update a 
SET Colour = (Select d.description from tbldescription d where d.id =92), 
Gender = (Select d.description from tbldescription d where d.id =1) 

From tblAnimal a inner join 
tblDescription d on d.Animal =a.Animal 

참고 : 이 작동하지만 내가 할 것이라고하는 것은 tbldescription의 정상화입니다 것입니다.

0

또 다른 방법 :

UPDATE tblAnimal 
    SET colour = (select Description from tblDescription where ID = 92), 
     Gender = (select Description from tblDescription where ID = 1) 
1

이 시도 :

UPDATE tblAnimal a 
SET 
    a.Colour = (SELECT d.Description d FROM tblDescription d WHERE d.Animal = a.Animal AND ID = 92), 
    a.Gender = (SELECT d.Description d FROM tblDescription d WHERE d.Animal = a.Animal AND ID = 1) 
0

당신은 tblDescription와 상관 관계를 얻기 위해 tblAnimal의 ID 참조가 필요합니다.

tblAnimal :

--------------------------------- 
|Animal | ID | Colour | Gender| 
--------------------------------- 
|Dog | 1 |   |  | 
--------------------------------- 
|Dog | 92 |   |  | 
--------------------------------- 

그런 다음이를 실행할 수 :

UPDATE 
    tblAnimal as a 
SET 
    Colour = (SELECT Description from tblDescription x WHERE x.id = a.id), 
    Gender = (SELECT Description FROM tblDescription x WHERE x.id = a.id) 
+0

아마이 문제를 이해할 수 없습니다. 내 대답은 테이블 간의 일대일 관계를 가정했습니다. @ rida-benhammane의 대답이 올바른 것일 수 있습니다. –

+0

*** @ go_55699 ***,이 접근 방식이 실제로 작동한다는 것을 보여주는 [*** SQL Fiddle ***] (http://sqlfiddle.com/#!6/579a1/1/2)입니다. . – Linger

관련 문제