Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2011, 19:20   #1
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
Стрелка Удаление строки в MySQL

Здраствуйте. Я в замешательстве. Собирался я значит удалить лишь одну строку из многих, которые выдает запрос сравнения, и нефига... не стану много болтать и напишу код:

Код:
DELETE FROM vakancy WHERE vak_date = (
  SELECT MIN (vak_date) FROM vakancy where doljnost="стажер"
);
Ошибка: you can't specify target table 'vakancy' for update in FROM clause

Сразу скажу что в MS SQL managere этот запрос выполняется и запрос на select:

Код:
SELECT * FROM vakancy WHERE vak_date = (
  SELECT MIN (vak_date) FROM vakancy where doljnost="стажер"
);
в mySQL вполне себе работает и выдает то что нужно (одну строку из нескольких, которые удовлетворят условие). Спасибо если поделитесь соображениями и покажите мне что мне еще далеко до Вас.

PS: извиняюсь за вид сообщения? кнопки форматирования не активны из за opera turbo

Последний раз редактировалось Stilet; 13.03.2011 в 12:45.
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 13.03.2011, 11:26   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Нельзя делать выборку из обновляемой таблицы.
Вот такой запрос будет работать
Код:
delete from ОДНА_ТАБЛИЦА where vak_date = (
select min (vak_date) from ДРУГАЯ_ТАБЛИЦА where doljnost="стажер"
);
А в данном случае оператор SELECT работать будет, а для DELETE придется разбивать на два отдельных запроса. Т.е. сначала
x:= select min(...) where...
а потом
DELETE... WHERE vak_date = x
_SERGEYX_ вне форума Ответить с цитированием
Старый 13.03.2011, 11:44   #3
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
По умолчанию

огромное Спасибо! Я уже отчался и спрашивал на дваче ))
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 13.03.2011, 12:33   #4
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
По умолчанию

про
Цитата:
x:= select min(...) where...
не совсем понял (сначала удивился тому что можно сохранять таблицу в переменную) пэтому создал временную "Другую" таблицу. Спасибо за подсказку
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 13.03.2011, 15:55   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Не таблицу в переменную, а значение поля. Например, если это число, то
Код:
var x: integer;

Query.Close;
Query.SQL.Clear;
Query.SQL.Add('select min(number) from table');
Query.Open;
x:= Query.Fields[0].AsInteger;
а потом
Код:
DELETE FROM TABLE WHERE FIELD = x
_SERGEYX_ вне форума Ответить с цитированием
Старый 19.03.2011, 17:33   #6
S.T.U.D.E.N.T
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 21
По умолчанию

Вау/ просто я до таких примеров еще не дошел. Спасибо, буду знать
S.T.U.D.E.N.T вне форума Ответить с цитированием
Старый 21.03.2011, 00:57   #7
bowlhead
 
Регистрация: 27.01.2010
Сообщений: 4
По умолчанию

MySQL не поддерживает вложенные запросы
bowlhead вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP и MySQL удаление Table bondik PHP 14 11.07.2017 09:53
Удаление строки женя2010 Microsoft Office Excel 9 23.04.2010 16:23
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06
Удаление строки Minton87 Общие вопросы Delphi 4 07.05.2009 02:32
Удаление, обновление записей из MySQL таблицы xDjarx БД в Delphi 2 14.05.2008 13:36