我有一个哺乳动物属性表,其中包含以下元素;
MammalAttributeID AttributeID MammalID
有些哺乳动物的属性记录为“猫”和“猫”。 (AttributeID 234),有些属性记录为" feline" (AttributeID 456),有些人同时拥有" feline"和" cat"属性记录。
我们想要替换" cat"的属性。用"猫科动物"在哺乳动物属性表中删除" cat"属性。因此,如果一个哺乳动物只有猫科动物,那就是#34;属性记录它保持不变。如果它有两个" cat"和"猫科动物"属性记录条目" cat"属性记录已删除。
如果它只有" cat"属性记录a"猫科动物"插入属性记录和" cat"属性记录已删除。
我无法围绕执行此操作所必需的SQL。一些SQL专家可以指出我正确的方向吗?
答案 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'
应该这样做。