首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在T-SQL中正确更新两个表?

如何在T-SQL中正确更新两个表?
EN

Stack Overflow用户
提问于 2017-07-18 12:00:51
回答 1查看 48关注 0票数 0

我发现这两个表在每行数据上有很大的不同。现在我想知道如何才能正确地更新它们。我尝试使用LIKE或CONTAINS,但我不知道如何实现它们,因为数据是严格不同的单词或数据。希望你能帮我。非常感谢。

代码语言:javascript
复制
DECLARE @MyTable1 TABLE(Id int identity(1,1), LandId nvarchar(10), Block nvarchar(100), Floor nvarchar(10), Unit nvarchar(10), TransactionPrice nvarchar(100), SalePrice nvarchar(100), ActualSize nvarchar(100))

INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'2/F', N'B', N'4011177', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'2/F', N'C', N'5611194', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'2/F', N'D', N'4357460', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'B', N'3374514', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'C', N'4863924', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'D', N'3373659', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'E', N'4602343', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'B', N'3409569', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'C', N'5134571', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'D', N'3409569', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'E', N'4125204', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'B', N'3598611', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'C', N'5189044', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'D', N'3444624', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'E', N'4669060', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1',  NULL, N'15', N'C', N'27353000', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1',  NULL, N'15', N'B', N'28414000', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1',  NULL, N'15', N'A', N'25556000', N'0', N'0'

SELECT * FROM @MyTable1

DECLARE @MyTable2 TABLE(Id int identity(1,1), LandId nvarchar(10), Block nvarchar(100), Floor nvarchar(10), Unit nvarchar(10), TransactionPrice nvarchar(100), SalePrice nvarchar(100), ActualSize nvarchar(100))

INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'2樓 2/F', N'B', N'NULL', N'4082800', N'14793'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'2樓 2/F', N'C', N'NULL', N'6562800', N'18230'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'2樓 2/F', N'D', N'NULL', N'4586800', N'18130'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'B', N'NULL', N'3946800', N'14950'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'C', N'NULL', N'5688800', N'14662'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'D', N'NULL', N'3945800', N'14723'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'E', N'NULL', N'5153800', N'16106'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'B', N'NULL', N'4153800', N'15050'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'C', N'NULL', N'6770800', N'13989'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'D', N'NULL', N'7769800', N'14688'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'E', N'NULL', N'4836800', N'13252'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'6樓 6/F', N'B', N'NULL', N'4196800', N'15261'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'6樓 6/F', N'C', N'NULL', N'6840800', N'14134'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'6樓 6/F', N'D', N'NULL', N'7849800', N'14839'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'6樓 6/F', N'E', N'NULL', N'4914800', N'13728'
INSERT INTO @MyTable2 SELECT N'1', N'帝滙豪庭 Wellesley', N'15', N'C', N'NULL', N'39905000', '23000'
INSERT INTO @MyTable2 SELECT N'1', NULL, N'15', N'B', N'NULL', N'28414000', '24100'
INSERT INTO @MyTable2 SELECT N'1', N'帝滙豪庭 Wellesley', N'15', N'A', N'NULL', N'25556000', '22100'

SELECT * FROM @MyTable2

UPDATE 
    x
SET 
    x.Block = y.Block,
    x.SalePrice = y.SalePrice,
    x.ActualSize = y.ActualSize
FROM 
    @MyTable1 x
JOIN @MyTable2 y
    ON x.LandId = y.LandId
    AND (x.BLOCK = y.BLOCK OR (x.block IS NULL AND y.BLOCK IS NULL))
    AND x.FLOOR = y.FLOOR
    AND x.UNIT = y.UNIT


-- I want to achived table

1   1   北翼 North Wing   2/F B   4011177     4082800     14793
2   1   北翼 North Wing   2/F C   5611194     6562800     18230
3   1   北翼 North Wing   2/F D   4357460     4586800     18130
4   1   北翼 North Wing   3/F B   3374514     3946800     14950
5   1   北翼 North Wing   3/F C   4863924     5688800     14662
6   1   北翼 North Wing   3/F D   3373659     3945800     14723
7   1   北翼 North Wing   3/F E   4602343     5153800     16106
8   1   北翼 North Wing   5/F B   3409569     4153800     15050
9   1   北翼 North Wing   5/F C   5134571     6770800     13989
10  1   北翼 North Wing   5/F D   3409569     7769800     14688
11  1   北翼 North Wing   5/F E   4125204     4836800     13252
12  1   北翼 North Wing   6/F B   3598611     4196800     15261
13  1   北翼 North Wing   6/F C   5189044     6840800     14134
14  1   北翼 North Wing   6/F D   3444624     7849800     14839
15  1   北翼 North Wing   6/F E   4669060     4914800     13728
16  1   帝滙豪庭 Wellesley      15  C   27353000    39905000    23000
17  1   帝滙豪庭 Wellesley      15  B   28414000    28414000    24100
18  1   帝滙豪庭 Wellesley      15  A   25556000    25556000    22100
EN

回答 1

Stack Overflow用户

发布于 2017-07-18 12:59:36

代码语言:javascript
复制
UPDATE x SET 
x.Block = (case when y.Block is null then N'帝滙豪庭 Wellesley'else x.block end) ,
x.SalePrice = y.SalePrice,
x.ActualSize = y.ActualSize FROM @MyTable1 x JOIN @MyTable2 y
ON x.Id = y.Id

嗨,

  1. 我使用了一条case语句,该语句会将@table1中的值更改为Wellesley,否则保持块名不变。
  2. I已经根据id而不是landId连接了表。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45157264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档