我有桌子A
ID|POS|Location|ITEM |COLOR
------------------------------
1 | 1 |ABC |A | RED
1 | 2 |ABC |B | BLUE
1 | 3 |ABC |NULL | YELLOW
1 | 4 |ABC |D | NULL
2 | 1 |ABC |A | BLACK
2 | 2 |ABC |B | BLUE
2 | 3 |ABC |C | RED
3 | 1 |ABC |NULL | BROWN
4 | 1 |ABC |A | WHITE
4 | 2 |ABC |B | RED
4 | 3 |ABC |NULL | BLUE
4 | 4 |ABC |NULL | YELLOW
5 | 1 |ABC |A | NULL
5 | 2 |ABC |C | NULL
5 | 3 |ABC |D | BLUE
6 | 1 |ABC |A | RED
6 | 2 |ABC |B | BROWN
6 | 3 |ABC |C | WHITE
7 | 1 |ABC |NULL | RED
7 | 2 |ABC |B | NULL
7 | 3 |ABC |C | YELLOW
8 | 1 |ABC |A | NULL
8 | 2 |ABC |B | BLACK
8 | 3 |ABC |C | BLUE
8 | 4 |ABC |D | RED
8 | 5 |ABC |E | BROWN
9 | 1 |ABC |NULL | WHITE
9 | 2 |ABC |C | BLUE
9 | 3 |ABC |D | YELLOW
9 | 4 |ABC |E | NULL
10 | 1 |ABC |A | NULL
10 | 2 |ABC |B | WHITE
10 | 3 |ABC |C | BLACK
11 | 1 |ABC |A | BLUE
11 | 2 |ABC |B | NULL
表B
ID|POS|Location|ITEM
1 | 1 |ABC |A
1 | 2 |ABC |B
1 | 3 |ABC |B
1 | 4 |ABC |D
2 | 1 |ABC |A
2 | 2 |ABC |B
2 | 3 |ABC |C
3 | 1 |ABC |E
4 | 1 |ABC |A
4 | 2 |ABC |B
4 | 3 |ABC |F
4 | 4 |ABC |NULL
5 | 1 |ABC |A
5 | 2 |ABC |C
5 | 3 |ABC |NULL
6 | 1 |ABC |A
6 | 2 |ABC |B
和表C
ID|POS|Location |COLOR
--------------------------
1 | 1 |ABC | RED
1 | 2 |ABC | BLUE
1 | 3 |ABC | YELLOW
1 | 4 |ABC | RED
2 | 1 |ABC | BLACK
2 | 2 |ABC | BLUE
2 | 3 |ABC | VIOLET
3 | 1 |ABC | BROWN
4 | 1 |ABC | WHITE
4 | 2 |ABC | RED
4 | 3 |ABC | BLUE
4 | 4 |ABC | YELLOW
5 | 1 |ABC | WHITE
5 | 2 |ABC | BLACK
5 | 3 |ABC | BLUE
6 | 1 |ABC | RED
6 | 2 |ABC | BROWN
6 | 3 |ABC | WHITE
7 | 1 |ABC | RED
7 | 2 |ABC | BLUE
7 | 3 |ABC | YELLOW
8 | 1 |ABC | PURPLE
8 | 2 |ABC | BLACK
8 | 3 |ABC | PINK
8 | 4 |ABC | RED
8 | 5 |ABC | BROWN
9 | 1 |ABC | WHITE
9 | 2 |ABC | BLUE
9 | 3 |ABC | YELLOW
9 | 4 |ABC | NULL
10 | 1 |ABC | CYAN
10 | 2 |ABC | WHITE
10 | 3 |ABC | BLACK
11 | 1 |ABC | INDIGO
11 | 2 |ABC | NULL
我想复制表B中的Items列(非空项)和表C中的Colors列(非空颜色),只有当Item列为null或表A中的颜色项为null时才将它们更新到表A中。
谢谢,
答案 0 :(得分:0)
看起来你的钥匙是ID和POS?如果您使用的是sql server,则可以使用case语句
执行此操作UPDATE a
set
item = CASE WHEN b.item is not null then b.item else a.item END,
color = CASE WHEN c.color is not null then c.color else a.color END
FROM TableA a
INNER JOIN TableB b
on a.ID = b.ID and a.POS = b.POS
INNER JOIN TableC c
on a.ID = c.ID and a.POS = c.POS