SQL-Server:从另一个表

时间:2016-08-18 10:59:09

标签: sql sql-server

我有两个表,一个表示一些数据,另一个表示将两个数据链接在一起。 第一个Redaction有三列; IDXY。 第二个LinkedRedactions有两列; PrimaryIDSecondaryID,它们是ID中两个链接的Redaction行,需要具有相同的X和{{Y 1}}值。

我想要做的是更新XYRedaction的{​​{1}}的值,如果它们与SecondaryID的值不同{1}}和X代表相应的Y

不幸的是我不能使用PrimaryID,因为脚本将在kCura的Relativity平台上运行,而这个平台并不允许它们。 SQL脚本是理想的,它将由代理每隔几秒运行一次。

我已尝试声明临时表并从中进行更新,但这给了我错误

  

"必须声明标量变量@ T"

TRIGGER

免责声明:这只是我第二天的SQL,所以会有更多的描述性答案

2 个答案:

答案 0 :(得分:2)

使用内部联接可以简化整个代码。

UPDATE red
SET [X] = redPrimary.[X], [Y] = redPrimary.[Y]
FROM [Redaction] red
INNER JOIN [LinkedRedactions] redLnk ON red.[ID] = redLnk.SecondaryIDs
INNER JOIN [Redaction] redPrimary ON redLnk.PrimaryID = redPrimary.[ID]

<强>解释

[Redaction] red
[LinkedRedactions] redLnk
[Redaction] redPrimary

red,redLnk和redPrimary被称为别名,它们用于通过使用不同的名称来调用表。

INNER JOIN

这是一种连接类型,仅当左侧和右侧表中存在相同的列值时才匹配。

UPDATE red
--SET statement
FROM [Redaction] red

这只通过它的别名'red'更新[Redaction]表。

INNER JOIN [LinkedRedactions] redLnk ON red.[ID] = redLnk.SecondaryIDs

这将分别连接Link表和要由辅助ID和ID更新的表。

INNER JOIN [Redaction] redPrimary ON redLnk.PrimaryID = redPrimary.[ID]

这会再次连接Link表和[Redaction]表,但分别使用Primary ID和ID列。这是一个自连接,它允许我们使用同一个表中的一组不同值更新表中的一组值。

由于条件是在ON子句中处理的,因此不需要WHERE条件。

答案 1 :(得分:0)

您可以使用UPDATE FROM

UPDATE [Redaction]
SET
    [X] = T.[X], 
    [Y] = T.[Y]
FROM 
    @T T
WHERE
    [Redaction].[ID] = T.[ID]