【发布时间】:2018-09-04 11:49:56
【问题描述】:
在使用SELECT CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine), MAX(SOURCE.LastDate) GROUP BY CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine) 和SELECT CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine), MAX(TARGET.LastDate) GROUP BY CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine) 时
MERGE dbo.TargetTbl AS TARGET
USING dbo.SourceTbl AS SOURCE
ON (TARGET.OrderNo = SOURCE.OrderNo)
WHEN MATCHED AND EXISTS (SELECT CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine)
,MAX(SOURCE.LastDate)
GROUP BY CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine)
INTERSECT SELECT CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine)
,MAX(TARGET.LastDate)
GROUP BY CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine)
)
THEN UPDATE SET TARGET.IsBlocked = 1;
我得到这个错误:
每个 GROUP BY 表达式必须至少包含一列 外部参考。
我搜索并找到了一些解决方案,但它们都不适用于我的查询,或者至少我不知道如何。任何帮助将不胜感激。
编辑:我绝对可以在 SOURCE & TARGET 表中有两个相同的行,它会抛出这个错误:
MERGE 语句尝试更新或删除同一行 不止一次。当目标行匹配多个源时会发生这种情况 排。 MERGE 语句不能更新/删除目标的同一行 表多次。细化 ON 子句以确保目标行 最多匹配一个源行,或使用 GROUP BY 子句进行分组 源行。
通过添加 GROUP BY 它给了我上面提到的外部引用错误。
【问题讨论】:
标签: sql-server tsql merge