我有两个表,一个代表一些数据,另一个把两个数据连接在一起。第一列是Redaction,有三列:ID、X、Y。第二个列LinkedRedactions有两个列:PrimaryID、SecondaryID,它们是来自Redaction的两行的IDs,这些行是链接的,需要具有相同的X和Y值。
我想要做的是更新X和Y在Redaction中的值,如果它们与对应的PrimaryID的X和Y的值不相同的话。
不幸的是,我不能使用TRIGGER,因为脚本将在kCura的相对论平台上运行,这不允许它们。SQL脚本非常理想,它每隔几秒钟由代理运行一次。
我尝试声明一个临时表并根据表进行更新,但这给了我错误
“必须声明标量变量@T”
DECLARE @T TABLE (
[ID] INT, [X] INT, [Y] INT
)
INSERT INTO @T
SELECT
[ID], [X], [Y]
FROM
[Redaction] AS R
WHERE
[ID] IN (
SELECT [PrimaryID] FROM [LinkedRedactions]
)
UPDATE
[Redaction]
SET
[X] = @T.[X], [Y] = @T.[Y]
WHERE
[Redaction].[ID] IN (
SELECT [ID] FROM @T
)免责声明:这是我学习SQL的第二天,希望有更多的描述性答案。
发布于 2016-08-18 11:10:56
可以使用内部联接简化整个代码。
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红色、redLnk和redPrimary称为别名,它们使用不同的名称来调用表。
INNER JOIN这是一种只有在左表和右表都存在相同列值的情况下才匹配的联接类型。
UPDATE red
--SET statement
FROM [Redaction] red这只会通过别名'red‘更新编辑表。
INNER JOIN [LinkedRedactions] redLnk ON red.[ID] = redLnk.SecondaryIDs这将分别连接由辅助ID和ID更新的Link表和表。
INNER JOIN [Redaction] redPrimary ON redLnk.PrimaryID = redPrimary.[ID]这将再次连接链接表和编辑表,但分别使用主ID和ID列。这是一个自联接,它允许我们用来自同一表的不同的一组值更新表中的一组值。
不需要条件,因为条件是在ON子句中处理的。
发布于 2016-08-18 11:05:38
您可以使用UPDATE FROM
UPDATE [Redaction]
SET
[X] = T.[X],
[Y] = T.[Y]
FROM
@T T
WHERE
[Redaction].[ID] = T.[ID]https://stackoverflow.com/questions/39016482
复制相似问题