在不使用distinct运算符的情况下比较Sql中的行? (不同的运营商实施)

时间:2012-01-23 04:07:15

标签: sql sql-server-2008 tsql

我想比较查询结果中的两行,例如,如果第一行等于第二行。

给出表格的查询

SELECT * FROM table_name

如果查询结果为100行,那么我们如何比较每一行是否相等。只是我对sql server如何实现感到好奇。基本上实现了Distinct运算符。只是想知道SQL服务器将如何在流程后面实现。因为它有助于更​​清楚地理解这个概念。

3 个答案:

答案 0 :(得分:6)

sql server可能使用的最简单方法 - 比较整行的哈希值:

SELECT CHECKSUM(*)
from YourTable

或选择列

SELECT CHECKSUM(col1, col2, col3)
from YourTable

并且如果校验和不同 - 行是不同的,但是如果校验和匹配 - 它需要更仔细地检查列的确切值,但是过滤掉校验和不匹配的结果会更容易或更少。 / p>

检查候选人是否重复:

SELECT CHECKSUM(*)
from YourTable
GROUP BY CHECKSUM(*)
HAVING COUNT(*) > 1

答案 1 :(得分:2)

您可以使用以下查询:

SELECT * 
FROM table_name 
GROUP BY col1,col2,... -- all columns to test for equality here
HAVING COUNT(*)>1

GROUP BY中,您要将每列的名称设为相等。如果您希望整行相等,请在表格中记下每列的名称。

答案 2 :(得分:-1)

无论如何,您的“在关系数据库中”的表将具有将在其他表中使用的主键。

因此,您的行1-100因为该键而全部都是唯一的。

但是,如果您要尝试比较特定列,则需要构建类似于此的函数:

$temp;
$i=0;

$stmt = $mysqli->prepare("SELECT id, name FROM users");
$stmt->execute();
$stmt->bind_result($id, $name);
while($stmt->fetch()){

     if($temp!=$name){
          $temp=$name;
          $saveIDs[$i]=$id;
     }

$i++;
}