SQLite: удаляйте дублирующиеся строки, когда вся строка не уникальна - PullRequest
1 голос
/ 21 марта 2011

Я создаю представление SQLite для отслеживания электронных писем клиентов и их учетных записей. Есть клиенты, которые создали несколько учетных записей с одним и тем же адресом электронной почты. Используя SQLite, можно ли ограничить представление возвратом каждого письма только один раз, независимо от того, сколько учетных записей у этого человека? Меня не интересует, какая учетная запись будет удалена (например, Jim1 или Jim2).

AccountName    Email
Jim1           Jim@example.com
Jim2           Jim@example.com
Shania         Sh@example.com

Вид вернется:

AccountName    Email
Jim1           Jim@example.com
Shania         Sh@example.com

Спасибо!

1 Ответ

3 голосов
/ 21 марта 2011

Сгруппируйте результаты по Email, затем возьмите первую или последнюю соответствующую запись:

  SELECT Email
  ,      MIN(AccountName) AS Account
    FROM table
GROUP BY Email;

UPDATE : Обратите внимание, что вы можете добавить уникальное ограничение в столбец электронной почты, чтобы SQLite выдавал ошибку, если вы попытаетесь вставить то же значение во второй раз:

CREATE TABLE Users
( id          INTEGER PRIMARY KEY
, email       TEXT    NOT NULL UNIQUE COLLATE NOCASE
, accountname TEXT    NOT NULL        COLLATE NOCASE
);

Предложение UNIQUE в столбце email указывает, что никакие две строки не могут содержать одно и то же значение.
Предложение COLLATE NOCASE заставляет SQLite сравнивать значения в этой строке без учета регистра (так что EMAIL и eMail будут считаться равными).

...