用于合并完全不匹配的表的SQL代码

时间:2012-05-28 20:35:26

标签: sql netezza

我有一个看起来像这样的表:

CODE ANIMAL

123  "Alligator"
1254 "Cardinal"
5675 "Golden Retreiver"

我还有一张看起来像这样的表:

CODE  TYPE
12367 Reptile
12    Bird
56    Dog 

我想根据代码将列Type添加到第一个表中。我不知道该怎么办。

1 个答案:

答案 0 :(得分:1)

第一项工作是使用alter table语句添加列。

那样
Alter Table Animals Add AnimalTypeCode int null

然后你需要把它包起来,那将是一堆更新语句

之类的东西说
Update Animals 
Set AnimalTypeCode = 12367
Where Code = 123

或者说Crocodile是679

Update Animals 
Set AnimalTypeCode = 12367
Where Code in (123,679)

或者如果您更喜欢它更具可读性

Update Animals 
Set AnimalTypeCode = 12367
Where Animal in ('Alligator','Crocodile')

继续抨击,直到他们都有一个,也许根据需要添加一些新类型,然后你可以添加一个外键。

没有简单的方法可以做到这一点,除非你把一张桌子藏在动物类型的某个地方

编辑添加。鉴于AnimalCode = AnimalTypeCode * 100 +?那么

Update Animals
Set AnimalTypeCode = Cast(AnimalCode / 100 as Int)

可以做这个工作

Select * 
From Animals
outer join AnimalTypes On Animals.AnimalTypeCode = AnimalTypes.Code
Where AnimalTypes.Code is null

将为您提供动物类别未指向现有动物类型的所有动物。

你需要警惕的是1269,大象,鸟(12)。如果你有类似的东西,你必须单独修复它们。