sql-server - 如何比较同一个SQL表的多行

标签 sql-server

假设我有一个如下所示的 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/

相关文章:

c# - Linq 语句中的“让”生成交叉连接

sql-server - 是什么原因导致 "SQL01268: Msg 1834: cannot be overwritten. It is being used by database"? (在数据库项目中)

sql - 提取特定空间实例之间的字符串 - SQL Server

sql-server - Int 主键 - 超出 int 范围

sql - 从 SQL Server 中的字符串中提取子字符串

sql-server - 为什么在通过 sp_executeSQL 过程执行时,完全相同的 SQL 查询会产生不同的执行计划?

sql-server - 70 个数据库的 SQL Server 复制,并在短时间窗口内进行转换

sql-server - 使用 FOR XML AUTO 设置表变量输出的格式

sql-server - 操作系统无法识别已安装的 OLE DB 提供程序

sql-server - 一个非常简单的T-SQL语句语法错误