我有3个表,其中2个是临时表。一个具有要更新的旧值,另一个具有新值。
第一个表格包含Telephone
和ID
列,其他两个只包含一列,telephones
实施例
表TelephonesOrganization
:
ID Telephone
1 1234
1 4567
1 5678
表TelephonesToUpdate
:
Telephone
1234
4567
表TelephonesNewValues
:
9999
9999
TelephonesToUpdate
中要更新的值直接对应TelephonesNewValues
中的同一行,例如1234将取值9999,ID也是变量,在这种情况下为1。
我已尝试使用和UPDATE
并在Where比较Telephones
和id但由于某种原因我得到重复的条目。
Declare @ID int
Set @ID = 1
UPDATE A
SET A.Telephone = 12345 FROM TelephoneOrg A, @TempOLDTelephones B , @TempNEWTelephones C
WHERE A.Telephone = B.Telephone and A.ID = @ID
提前感谢您的回答,
但丁。
答案 0 :(得分:1)
我相信您在TelephonesToUpdate和TelephonesNewValues之间没有ID,但顺序是相同的,所以我们可以使用ROW_NUMBER创建一个:http://msdn.microsoft.com/en-us/library/ms186734(v=sql.100).aspx
UPDATE t
SET t.Telephone = b.Telephone
FROM TelephonesOrganization AS t
INNER JOIN
(
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS 'ID'
,Telephone
FROM TelephonesToUpdate
) AS a
ON t.Telephone = a.Telephone
INNER JOIN
(
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS 'ID'
,Telephone
FROM TelephonesNewValues
) AS b
ON a.ID = b.ID
;
以下是您可以使用的SQL小提琴:http://sqlfiddle.com/#!3/3c15d/3
答案 1 :(得分:0)
update TelephonesOrganization o
set o.Telephone = ( select u.TelephonesNewValues
from TelephonesToUpdate u
where u.Telephone = o.Telephone )
where o.ID = 1
and exists ( select u.TelephonesNewValues
from TelephonesToUpdate u
where u.Telephone = o.Telephone );
更新:我在问题更新之前回答了这个问题。我不认为TelephoneNewValues是一张桌子。我以为它是TelephoneToUpdate表的一列。我的exists子句中也有错误。