сравнивая строки в Sql, не используя отдельный оператор?(отличная реализация оператора) - PullRequest
3 голосов
/ 23 января 2012

Я хочу сравнить две строки из результата запроса, например, если 1-я строка равна 2-й строке.

Задан запрос вида

SELECT * FROM table_name

, если запросРезультаты 100 строк, то как мы сравниваем каждую строку на равенство.просто мне любопытно о сервере sql, как он будет реализовывать.в основном реализация оператора Distinct.просто хочу знать, как SQL-сервер будет реализовываться в процессе.так как это поможет лучше понять концепцию.

Ответы [ 3 ]

6 голосов
/ 23 января 2012

Самый простой способ, которым может пользоваться сервер sql - сравнивать хэши целых строк:

SELECT CHECKSUM(*)
from YourTable

или выбранные столбцы

SELECT CHECKSUM(col1, col2, col3)
from YourTable

и если контрольные суммы различаются - строки отличаются, но если контрольная сумма совпадает - необходимо более тщательно проверять точные значения столбцов, но будет более или менее легче отфильтровать результаты, контрольные суммы которых не совпадают.

Чтобы проверить кандидатов на дубликаты:

SELECT CHECKSUM(*)
from YourTable
GROUP BY CHECKSUM(*)
HAVING COUNT(*) > 1
2 голосов
/ 23 января 2012

Вы можете использовать следующий запрос:

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

В GROUP BY вы вводите имя каждого столбца, которому хотите быть равным. Если вы хотите, чтобы целые строки были равны, запишите имя каждого столбца в таблице.

0 голосов
/ 23 января 2012

Независимо от того, что ваша таблица "в реляционной базе данных" будет иметь первичный ключ, который будет использоваться в других таблицах.

Из-за этого все строки 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++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...