我有两张桌子
表1结构NOT NULL。
表2某些值为NULL
我想更新table2到table1,
我想要选择值,如果null不更新,跳过下一列有更新值。
我的表
table1 value(table1) table2 value(table2)
t1ID 1234 t2ID 1234
t1Name Bear t2Name null
t1Adress 87/25 t2Adress 99/77
t1Tel 01254798535 t2Tel null
我的代码
UPDATE table1
SET t1Name = (SELECT t2Name
FROM table2
WHERE t2Name IS NOT NULL
),
t1Adress = (SELECT t2Adress
FROM table2
WHERE t2Adress IS NOT NULL
),
t1Tel = (SELECT t2Tel
FROM table2
WHERE t2Tel IS NOT NULL
)
FROM table1,table2
WHERE t1ID = '1234' AND t2ID ='1234'
当我执行时,我得到错误:
SQL错误:消息512,级别16,状态1,行1子查询返回更多 比1值。当子查询跟随=,!=时,不允许这样做, &lt ;,< =,>,> =或者当子查询用作表达式时。该 声明已被终止。
我该如何解决?
答案 0 :(得分:2)
我想你打算:
UPDATE t1
SET t1Name = COALESCE(t2.t2Name, t1.t1Name),
t1Adress = COALESCE(t2.t2Adress, t1.t1Adress),
t1Tel = COALESCE(t2.t2Tel, t1.t2Tel)
FROM table1 t1 JOIN
table2 t2
ON t1.t1id = t2.t2id
WHERE t1.t1ID = 1234;
请注意,我删除了'1234'
上的单引号。 Id
通常是数字,因此应将它们与数字进行比较。
您的代码失败,因为您使用的是子查询而不是join
中的值。你似乎在table2
中有多行,所以你得到的子查询返回了多行错误。
答案 1 :(得分:0)
以下查询使用table1值替换空值,并从table2值
更新其余值UPDATE T1 SET T1.t1Name = IsNull(T2.t2Name,T1.t1Name),
T1.t1Adress = IsNull(T2.t2Adress,T1.t1Adress),
T1.t1Tel = IsNull(T2.t2Tel,T1.t1Tel)
FROM table1 TI
INNER JOIN table2 T2 ON T1.t1ID = T2.t2ID
尝试以下选择查询以检查结果
SELECT T1.t1Name,IsNull(T2.t2Name,T1.t1Name),T1.t1Adress,IsNull(T2.t2Adress,T1.t1Adress),T1.t1Tel,IsNull(T2.t2Tel,T1.t1Tel)
FROM table1 TI
INNER JOIN table2 T2 ON T1.t1ID = T2.t2ID