【发布时间】:2015-09-09 08:18:04
【问题描述】:
我有一个名为“学生”的原始表,如下所示:
idstudent studentname studentclass
101 adam A
102 brian NULL
103 charlie C
104 danny D
然后,我有一个临时表名“student_temp”,如下所示:
idstudent studentname studentclass
101 adam A
102 brian B
103 NULL C
105 edward E
如果我在 SQL Server Management Studio 2008 R2 上运行此查询:
USE [StudentDatabase]
GO
UPDATE stu
SET [studentname] = tmp.[studentname]
, [studentclass] = tmp.[studentclass]
FROM [StudentDatabase].[dbo].[student] stu
INNER JOIN [StudentDatabase].[dbo].[student_temp] tmp
ON stu.[idstudent] = tmp.[idstudent]
GO
INSERT INTO student
SELECT
tmp.[idstudent]
, tmp.[studentname]
, tmp.[studentclass]
FROM [StudentDatabase].[dbo].[student] stu
RIGHT OUTER JOIN [StudentDatabase].[dbo].[student_temp] tmp
ON stu.[idstudent] = tmp.[idstudent]
WHERE stu.[idstudent] IS NULL
'student'表的结果会是这样的:
idstudent studentname studentclass
101 adam A
102 brian B
103 NULL C
104 danny D
105 edward E
但我想要的是,结果会是这样的:
idstudent studentname studentclass
101 adam A
102 brian B
103 charlie C
104 danny D
105 edward E
注意idstudent=103 在student 表中已经有studentname 值“charlie”。但它被student_temp表中的记录替换为NULL。
有没有办法解决这个问题?
【问题讨论】:
-
如果两个表的非空值不相等,应该首选哪一个?
-
首选的是student_temp表
标签: sql sql-server tsql sql-server-2008-r2