带CASE语句的SQL更新
问题描述:
我将使用示例表。带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语句的问题。
再次感谢大家。
答
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正常化。
答
另一种方式:
UPDATE tblAnimal
SET colour = (select Description from tblDescription where ID = 92),
Gender = (select Description from tblDescription where ID = 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)
答
你必须为了得到与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)
可能我不明白这个问题。我的答案假设了表之间的一对一关系。 @ rida-benhammane的答案很可能是正确的答案。 –
*** @ go_55699 ***,这是[*** SQL小提琴***](http://sqlfiddle.com/#!6/579a1/1/2),表明这种方法确实有效。 – Linger