我想比较查询结果中的两行,例如,如果第一行等于第二行。
给出表格的查询
SELECT * FROM table_name
如果查询结果为100行,那么我们如何比较每一行是否相等。只是我对sql server如何实现感到好奇。基本上实现了Distinct运算符。只是想知道SQL服务器将如何在流程后面实现。因为它有助于更清楚地理解这个概念。
答案 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++;
}