使用SQL Server删除和替换表中的条目

时间:2014-07-10 16:00:44

标签: sql sql-server insert sql-delete

我有一个哺乳动物属性表,其中包含以下元素;

MammalAttributeID AttributeID MammalID

有些哺乳动物的属性记录为“猫”和“猫”。 (AttributeID 234),有些属性记录为" feline" (AttributeID 456),有些人同时拥有" feline"和" cat"属性记录。

我们想要替换" cat"的属性。用"猫科动物"在哺乳动物属性表中删除" cat"属性。因此,如果一个哺乳动物只有猫科动物,那就是#34;属性记录它保持不变。如果它有两个" cat"和"猫科动物"属性记录条目" cat"属性记录已删除。

如果它只有" cat"属性记录a"猫科动物"插入属性记录和" cat"属性记录已删除。

我无法围绕执行此操作所必需的SQL。一些SQL专家可以指出我正确的方向吗?

3 个答案:

答案 0 :(得分:2)

我认为奥尔加斯的反应会错过哺乳动物是猫而不是猫科动物的情况,因为删除首先发生。

--update cats to felines
Update "mammal attribute table"
set AttributeID = 456 
where AttributeID=234

go 

--delete cat attribute
delete from attributetable where AttributeID=234
go 

--delete duplicate feline attribute
delete 
from "mammal attribute table" 
where mammalattributeid in(
        select max(mammalattributeid)
        from "mammal attribute table" 
        group by mammalid,attributeid
        having count(*)>1)

答案 1 :(得分:1)

步骤1.使用' cat'删除行具有“猫科动物”的哺乳动物的属性属性也是。

DELETE FROM [YOUR_TABLE]
WHERE MammalID in 
(SELECT MammalID FROM [YOUR_TABLE] WHERE AttributeID = 234 -- cat
INTERSECT
SELECT MammalID FROM [YOUR_TABLE] WHERE AttributeID = 456) --feline
AND AttributeID = 234

步骤2.更换所有遗体' cat'用“猫”'

UPDATE [YOUR_TABLE]
SET AttributeID = 456 
WHERE AttributeID = 234

答案 2 :(得分:0)

假设它们位于不同的列中,您需要规范化第一列,因此它们都是相同的,然后只删除另一列。

Update [table] set [attribute1] = 'cat' where [attribute1]='feline' or [attribute2]='cat'  

然后,删除所有其他人:

delete from [table] where [attribute2]='feline' or [attribute2]='cat'

应该这样做。