2014-02-07 156 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