Знатокам SQL. Помогите с запросом. [SOLVED]

Есть таблица. Есть столбец "id", столбец "x" и куча других столбцов с данными. В столбце "х" есть нескольво разных, повторяющихся значений, например, одно из них это "1".
Как заменить все однаковые(например "1") значенияв столбце "x" на уникальные числа для каждой ячейки столбца "x"?

.

DROP TABLE IF EXISTS foo; 
CREATE TABLE foo ( 
id INT UNSIGNED NOT NULL PRIMARY KEY, 
c CHAR(1) NOT NULL, 
UNIQUE (c) 
);

первая ссылка в гугле - http://forums.mysql.com/read.php?10,61057

Это не свосем то.

Это не свосем то. поправил тему.

Ну, красоты не обещаю, но

Ну, красоты не обещаю, но можно (за точность не ручаюсь, давненько делов с Мускулом не имел):

mysql> SELECT id, count(x) FROM TABLE
     > WHERE x="1";

Далее есть два варианта:
1. Перенос данных в другую таблицу аналогичной структуры, зачистка исходной таблицы, возврат изменённых данных;
2. Поиграться с SET'ом (предварительно сделав бэкап).

:wq
--
Live free or die

С одной стороны - это можно

С одной стороны - это можно сделать и на клиенте (смотря зачем тебе выборка) - просто при фетче проверять было ли такое значение и если да - заменять из какого-нить генератора

Ну а можно примерно так (Firebird)

CREATE TABLE TEST
(
  VAL Integer,
  ID Integer NOT NULL,
  CONSTRAINT PK_TEST_1 PRIMARY KEY (ID)
);
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
 ON TEST TO  SYSDBA WITH GRANT OPTION;
select 
 id
from test tst_u1
where 
  exists (SELECT first 1 VAL FROM TEST tst2 where tst2.val = tst_u1.val group by 1 having (count(val)>1))
UNION
select 
 val 
from test tst_u2
where 
  exists (SELECT first 1 VAL FROM TEST tst2 where tst2.val = tst_u2.val group by 1 having (count(val)=1))  

Тут "конфликтные" значения поля val заменяются на гарантированно уникальные id ()

"Задавать вопросы имеет смысл только после того, как окончательно убедился, что сам ответ не найдешь. То есть очень, очень редко." (с) сэр Джуффин Халли, Начальник Тайного Сыска

Всем, спасибо. Сделал через

Всем, спасибо. Сделал через цикл на перле, чтобы не парится.

Внушаить :)

joper написал(а):
Сделал через цикл на перле, чтобы не парится.

Ну у тебя и "не париться" :)))

:wq
--
Live free or die

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".