2014-02-07 157 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中的第一行。

我該如何編寫此UPDATE語句,以便顏色和性別都是tblDescription中的內容?

編輯

謝謝大家對您的解決方案!是的,表需要進行標準化,但這只是嚴格的例子,以配合我對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小提琴***](http://sqlfiddle.com/#!6/579a1/1/2),表明這種方法確實有效。 – Linger