假设我有一个如下所示的 SQL Server 表:
id valA valB valC
-----------------------
1 1 2 3
2 4 5 6
3 7 8 9
3 10 11 12
4 13 14 15
4 16 14 15
我想比较行以找到具有某些数据匹配的行。在这种情况下,我想识别具有匹配 id、valB 和 valC 的行,因此它应该只找到最后两行。 valA 列的内容将被忽略。
然后我想删除两行之一,然后我将根据需要调整 valA 列。我的麻烦是识别匹配的行。
从本网站上的许多其他类似问题中,我尝试了与此类似的各种事情:
SELECT DISTINCT
A.id
FROM
newtable A
INNER JOIN
newtable B ON A.id = B.id
WHERE
A.valB = B.valB AND
A.valC = B.valC
但我最终得到了所有四个 ID。我不知道为什么。即使这有效,我仍然不确定如何继续更新和删除我需要对找到的所有匹配行执行的操作。有什么建议?谢谢。
最佳答案
我认为你很接近。您只需要排除不需要的行:
SELECT DISTINCT A.id
FROM newtable A INNER JOIN
newtable B
ON A.id = B.id
WHERE A.valB = B.valB AND
A.valC = B.valC AND
A.valA <> B.valA;
关于sql-server - 如何比较同一个SQL表的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42048172/