Как найти строки в SQL, которые начинаются с той же строки (похожие строки)? - PullRequest
0 голосов
/ 20 июля 2010

У меня есть таблица с первичными ключами, которые выглядят так:

FIRSTKEY ~ ABC

SECONDKEY ~ DEF

FIRSTKEY ~ DEF

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

ВЫБРАТЬ ...

Дает мне:

FIRSTKEY ~ ABC

FIRSTKEY ~ DEF

как «дубликаты».

У меня уже есть бит для удаления конечного сегмента с помощью SUBSTRING:

ВЫБРАТЬ СУБСТРИНКУ (КОЛОННА, 0, CHARINDEX ('~', КОЛОННА)) ИЗ ТАБЛИЦЫ

Это на SQL Server.

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

Дайте этому шанс

SELECT SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)), COUNT(*) FROM TABLE 
GROUP BY SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN))
HAVING COUNT(*) > 1
0 голосов
/ 20 июля 2010

Первое данное решение будет определять ключевые префиксы;немного увеличьте его, чтобы строки таблицы начинались с этих ключей:

SELECT * 
FROM TABLE
WHERE SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)) IN
(
    SELECT SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)) FROM TABLE 
    GROUP BY SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN))
    HAVING COUNT(*) > 1
)

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

...