|
|
|
| есть такой запрос
delete from vacancies v
WHERE id in (select id from vacancies where regionid=20 AND v.dopinfo=dopinf AND v.profession=profession) AND
NOT id in (select max(id) from vacancies where regionid=20 AND v.dopinfo=dopinf AND v.profession=profession)
|
выдаёт ошибку, собственно вопрос - такую конструкцию в mysql в делит запихнуть нельзя (т.к. в firebird'e работает отлично), и можно ли как-то это обойти, кроме как повыбирать вначале айдишники, а потом их пихать вммето запросов в delete | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 12:13)
| | delete from vacancies v
WHERE id in (select id from vacancies where regionid=20 AND v.dopinfo=dopinf AND v.profession=profession) AND
id NOT in (select max(id) from vacancies where regionid=20 AND v.dopinfo=dopinf AND v.profession=profession)
неправильно писать NOT id in, надо id not in | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 12:24)
| | забыл написать - ошибку он выдаёт следующую
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id in (select id from vacancies where regionid=20 AND v.dopinfo=dopinfo ' at line 2 | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 12:32)
| | проверил мой вариант? | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 12:48)
| | ага, не помгло, ругается раньше, на первое условие | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 12:32)
| | у тя тут какая то вообще каша получилась.. видимо ты пытаешься как то поджойнить табличку саму с собой 2 раза
но могу сказать что "v" передать внутрь вложенного запроса вот так просто нельзя
указанная ошибка скорее всего ругается на "v", которую ты не юзаешь на своем уровне (вместе с "id in" и "id not in")
лучше объясни задачу и составим нормальный запрос | |
|
|
|
|
|
|
|
для: mechanic
(10.04.2008 в 12:54)
| | задача - удалтиь из таблицы повторяющиеся записи и оставить только одну из них,
ругается на "v", которую ты не юзаешь на своем уровне (вместе с "id in" и "id not in") - это я заметил и поправил - не помгло
кпросто пересел с firebirda, там это работало на ура
upd - всего разобрать надо 17 000 записей из них уникальных останется около 3 000 | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 13:17)
| | допустим если таблица такого вида table (id первичный ключ, column char)
тогда примерно так
delete from table
where column in (select column from table as t group by t.column having count(*)>1)
and id not in (select max(t.id) as id from table as t group by t.id )
попробуй так, таким образом будут удалены все повторяющиеся строки кроме последней из повторяющихся, соответственно заменив функцию max на другое условие можно выбирать какие записи оставлять в таблице | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 13:23)
| |
>delete from table
>where column in (select column from table as t group by t.column having count(*)>1)
>and id not in (select max(t.id) as id from table as t group by t.id )
|
вот в этой строчке у тебя выбирается просто максимальный id в таблице, а как сделать так, чтобы это условие знало какие сейчас проверяются значения т.е. во втором условии должно быть что-то типа where t.column=tt.column | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 13:35)
| | я не очень понял
" чтобы это условие знало какие сейчас проверяются значения т.е. во втором условии должно быть что-то типа where t.column=tt.column "
как это должно выглядеть? | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 13:42)
| | ну смотри что делает сейчас твой запрос
1е условие - выбирает все записи в которых заданное поле повторяется
2е условие - всегда возвращает максимальный id из талицы
хау итс ворк?) | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 13:57)
| | delete from table
where column in (select column from table as t group by t.column having count(*)>1)
and id not in (select max(t.id) as id from table as t group by t.id )
удаляет из таблицы все записи количество которых больше 1 и значение поля id которых не равняется максимальному значению id в таблице
можно ещё второе условие изменить:
and id <> (select max(t.id) as id from table as t group by t.id ) | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 14:21)
| | а надо чтобы удаляло все повторяющиеся
и id которых не равняется максимальному id из группы повторяющихся (а не из все таблицы)... | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 14:21)
| | да и так не проканает так как мне надо проверять запись на дубляж двух столбцов | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 13:17)
| | че то красивый запрос не рожается..
может тебя устроит в 2 этапа
select dopinfo, profession, max(id) as maxid from vacancies where regionid=20 group by 1,2
|
а потом
delete from vacancies where regionid=20 and id not in ("те id что мы выбрали тока что")
|
а хотя не!
в один запрос они отлично объединяются!
delete from vacancies where regionid=20 and id not in (select max(id) as maxid from vacancies where regionid=20 group by dopinfo, profession)
|
| |
|
|
|
|
|
|
|
для: mechanic
(10.04.2008 в 16:11)
| | >а хотя не!
>в один запрос они отлично объединяются!
>
delete from vacancies where regionid=20 and id not in (select max(id) as maxid from vacancies where regionid=20 group by dopinfo, profession)
|
смысл тотоже что и у меня в первом посте, только красивее) проблема в том что сервер ругается на вложенный селект в делете...
ну вообщем я уже всё сделал скриптом) спасибо за помощь | |
|
|
|
|
|
|
|
для: doddoindan
(10.04.2008 в 16:42)
| | старый мускуль?
у меня на 5.0-м все ок | |
|
|
|