![]() |
![]() |
Jup 28.04.2004 - 21:12 |
Как удлаить одинаковые (быть может за исключением автоинкрементного id)строки из таблицы? Спасибо. |
Deflorator 1 - 28.04.2004 - 22:12 | может, записи? |
буратин 2 - 28.04.2004 - 22:35 |
циклом. уверен, сервер не знает какие записи для тебя одинаковые. ему нужны значения и имена полей. |
буратин 3 - 28.04.2004 - 22:46 |
т.е. DELETE FROM таблица WHERE имя_поля1=значение AND имя_поля2=значение2 LIMIT 1; а если DELETE FROM таблица WHERE имя_поля1=имя_поля1 AND имя_поля2=имя_поля2 LIMIT 1, то будет удалять по порядку. |
Jup 4 - 28.04.2004 - 23:07 |
Спасибо, но вы, видимо, немного не поняли задачу. Некоторые стандарты СУБД основываются на том, что в таблице нет одинаковых строк (записей, кортежей - кому как больше нравится). А задача такая есть таблица с 3-мя полями (атрибутами, столбцами - тоже дело терминологии). 1-е автоинкрементный id, другие 2 просто некоторого типа. Так вот, нужно из таблицы удалить дублирующие записи, т.е. те у которых значения 2-го и 3-го поля совападают с теми же значиениями другой записи. |
Jup 5 - 28.04.2004 - 23:10 | Решение в цикле перебора по каждой не устраиватет, т.к. это "в лоб". Я думаю, что это задача для которой должно существовать изящное решение. |
Trial 6 - 28.04.2004 - 23:45 |
в лоб - это вот это: create temporary table tmp (id int); insert into tmp select distinct(t1.id) from tbl as t1 tbl as t2 where t1.id<>t2.id and t1.fld1=t2.fld1 and t1.fld2=t2.fld2 delete from tbl USING tbl,tmp where tmp.id=tbl.id |
Trial 7 - 28.04.2004 - 23:47 | Это удалит все записи имеющие дубликаты. |
buster 8 - 29.04.2004 - 00:29 | Если первое - автоинкрементное, то записи уже не будут одинаковыми. |
Jup 9 - 30.04.2004 - 08:36 |
2 Trial - ну я бы не сказал что это прямо в лоб, хотя и не изящно. И к тому же это удаляет все записи, которые имеют дубликаты, а мне надо оставить по одной, просто что бы не повторялись. 2 buster - а ты закрой глаза и представь что автоинкрементного поля нет :) |
buster 10 - 30.04.2004 - 09:51 | Я-то глаза закрыть могу, а СУБД работает только формально. Если не понимаешь этого — получится у тебя любви с компьютером :о)) Пиши стихи :о)) |
buster 11 - 30.04.2004 - 09:52 | мммм... не получится, то-есть :о)) |
буратин 12 - 30.04.2004 - 11:54 |
оператор DELETE работает с условием(condition), которое не получится составить так: ...а одну запись, пожалуйста, оставьте... SELECT COUNT() mysql_num_rows() DELETE FROM |
DIVЕR 13 - 30.04.2004 - 12:50 |
Буквально пару недель назад была ЭТА ЖЕ тема, с почти таким же сабжем. Поищите на пару страниц вперёд, там я дал вполне подходящее решение. Кстати, не "в лоб" не получится, надо в любом случае перебирать все записи и искать одинаковые. |
buster 14 - 30.04.2004 - 12:51 | В общем, выбирай записи, которые неодинаковые, очищай всю таблицу и вставляй выбранные записи туда опять... и всё у тебя получится |
v2d 15 - 30.04.2004 - 16:25 |
Резюмируя buster-а: create temporary table tmp select field2,field3 from tbl group by field2,field3; delete from tbl; insert into tbl (field2,field3) select * from tmp; |
DIVЕR 16 - 01.05.2004 - 19:43 | http://www.kuban.ru/cgi-bin/forum/forum28.cgi?page=5&ask=9661 |