Выбор случайного значения, не совпадающего с ключом

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

MySQL. Есть таблица members, в ней есть поле key - случайное девятизначное число. Требуется создать новый key, не совпадающий ни с одним из существующих. Как будет выглядеть запрос? select 100000000+floor(rand()*900000000) as new_key, а дальше?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

может GUID использовать?
а нафига было городить случайное число в ключ?
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

`id` mediumint(8) unsigned NOT NULL auto_increment,
Дальше просто инсерт..
[syntax=Delphi] [/syntax]
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

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

Скажу сразу, что не надо искать хорошее решение этой задачки в одном select'e. Для поиска значения ключа проще использовать цикл.

select min( v.new_key)
from members
, (
select round( dbms_random.value( 1, 1000) as new_key
from members
where rownum < 20
) v
where members.key != v.new_key

Этот запрос для оракл.

Константа 20 должна быть замена другим значением. Либо её надо подобрать экспериментальным путем, либо рассчитать используя знания теорвера :) , либо тупо брать 18% от количества свободных значений из диапазона значений для колонки key, но не более чем количество строк в таблице members.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Садись 2, это тупо незнание работы баз данных..
[syntax=Delphi] [/syntax]
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

Duncon писал(а):Садись 2, это тупо незнание работы баз данных..
Это о чём?
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Видимо, придется обходиться средствами php
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

auto_incrementНе полентесь найдите описание - оба..
[syntax=Delphi] [/syntax]
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

Duncon писал(а):auto_incrementНе полентесь найдите описание - оба..
А песня вовсе не о том, а о любви... :)

ТС спрашивал как написать sql, а не о том, как лучше создавать Pk
Игорь Акопян писал(а):а нафига было городить случайное число в ключ?
Это нужно когда импортируешь чужые данные или сливаешь несколько наборов в один. При проведении нагрузочных тестов для генерации данных; настройке производительности.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Это быдлорешение.. Переубеждать не буду..
[syntax=Delphi] [/syntax]
Ответить