Уникальная пара полей на SQL
Dec. 25th, 2008 02:41 pm![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Как на SQL сделать так что бы пара полей (именно пара, по отдельности могут быть одинаковыми), а что бы пара была в кол-ве 1 штука?
Может быть средствами Денвера это как то сделать можно?
Поля в таблице
id, login, date, exp
Надо что бы пара login и date была уникальная.
Может быть средствами Денвера это как то сделать можно?
Поля в таблице
id, login, date, exp
Надо что бы пара login и date была уникальная.
no subject
Date: 2008-12-25 12:43 pm (UTC)2. SELECT DISTINCT ...
В зависимости от смысла запроса.
no subject
Date: 2008-12-25 12:48 pm (UTC)FROM ...
2. SELECT login, date, <+ агрегатные функции>
FROM table
GROUP BY login, date
no subject
Date: 2008-12-25 12:56 pm (UTC)no subject
Date: 2008-12-25 01:14 pm (UTC)Сейчас придумаю :)
no subject
Date: 2008-12-25 01:16 pm (UTC)REPLACE INTO table (login, date, id, exp) VALUES (....)
Это mysql. Не уверен, что REPLACE есть в других диалектах.
no subject
Date: 2008-12-25 02:26 pm (UTC)no subject
Date: 2008-12-25 04:14 pm (UTC)Т.е. надо в имеющейся базе удалить дубликаты?
no subject
Date: 2008-12-25 04:26 pm (UTC)no subject
Date: 2008-12-25 04:28 pm (UTC)ALTER IGNORE TABLE table ADD UNIQUE INDEX (login, date).
Будет создан уникальный индекс и дубликаты будут удалены.
После этого использовать REPLACE для записи (см. прошлый коммент).
no subject
Date: 2008-12-25 04:48 pm (UTC)no subject
Date: 2008-12-25 01:14 pm (UTC)SELECT id, login, date, exp FROM table GROUP BY login, date
- если пары login+date уникальные, то неопределённости не будет, если неуникальные - возьмёт для каждой пары первую попавшуюся строку.
В стандартном SQL, если не ошибаюсь, такое не допускается, и поля, не входящие в GROUP BY, могут присутствовать только внутри агрегатных функций.
Тогда:
SELECT MIN(id), login, date, MIN(exp) FROM table GROUP BY login, date
- опять же, в случае уникальности пар неопределённости нет, в случае неуникальности - неопределённость разрешается с помощью MIN, но при этом id и exp могут попасться из разных строк.
Не забудьте сделать индекс по login+date, иначе всё будет очень медленно.
no subject
Date: 2008-12-25 02:56 pm (UTC)no subject
Date: 2008-12-25 01:16 pm (UTC)Само собой что при этом нужно перехватывать эксепшны от сервера.
no subject
Date: 2008-12-25 01:35 pm (UTC)За уникальность...
Date: 2008-12-25 02:19 pm (UTC)