powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / проблема с запросом
8 сообщений из 8, страница 1 из 1
проблема с запросом
    #33154589
Ju
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ju
Гость
пишу следующий запрос:
DELETE FROM b WHERE b.id NOT IN
(SELECT b.id FROM b LEFT JOIN a ON b.id = a.id WHERE a.id IS NULL)

мне возращается ошибка: #1093 - You can't specify target table 'b' for update in FROM clause.

объясните, пожалуйста, в чем дело? как исправить?
...
Рейтинг: 0 / 0
проблема с запросом
    #33154966
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MySQL нельзя писать вложенные запросы в командах DELETE Table.
...
Рейтинг: 0 / 0
проблема с запросом
    #33155773
Astron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется мне, что вся проблема из-за неумения пользоваться multi-delete.
Но вопрос вроде нескучный, давно не было.
Можно так, если я правильно понял задачу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
mysql> create table a (id int not null primary key);
Query OK,  0  rows affected ( 0 . 13  sec)

mysql> create table b (id int not null primary key);
Query OK,  0  rows affected ( 0 . 06  sec)

mysql> insert into b VALUES ( 1 ),( 2 ),( 3 );
Query OK,  3  rows affected ( 0 . 02  sec)
Records:  3   Duplicates:  0   Warnings:  0 

mysql> insert into a VALUES ( 1 );
Query OK,  1  row affected ( 0 . 00  sec)

mysql> delete  FROM b_alias USING b b_alias, (SELECT b.id FROM b LEFT JOIN a ON b.id = a.id WHERE a.id IS NULL) a_alias WHERE a_alias.id=b_alias.id;
Query OK,  2  rows affected ( 0 . 00  sec)

mysql> select * from b;
+----+
| id |
+----+
|   1  |
+----+
 1  row in set ( 0 . 00  sec)

...
Рейтинг: 0 / 0
проблема с запросом
    #33156019
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Astron

Здорово! :)

О таких вещах даже не подозревал.
...
Рейтинг: 0 / 0
проблема с запросом
    #33157752
Astron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:-)
Там еще multi-update есть, прикольная штука. В этом задании фишка была в том, то таблиц 2, а удалить надо из 1-й. Если бы сразу из 2-х, то все было бы проще, правильный ответ был бы RTM. А так, конструкция FROM у DELETE/UPDATE практически идентична SELECT, так же можно завернуть вложенные JOINы, к примеру.
...
Рейтинг: 0 / 0
проблема с запросом
    #33157840
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Astron:-)
Там еще multi-update есть, прикольная штука. В этом задании фишка была в том, то таблиц 2, а удалить надо из 1-й. Если бы сразу из 2-х, то все было бы проще, правильный ответ был бы RTM. А так, конструкция FROM у DELETE/UPDATE практически идентична SELECT, так же можно завернуть вложенные JOINы, к примеру.
>Там еще multi-update есть
В мане уже смотрел. Правда пока особо не понял. Как-то скудно там написано (поиском искал).
А где можно почитать про это (практические приемы и советы)?
...
Рейтинг: 0 / 0
проблема с запросом
    #33158126
Astron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Berkut[quot Astron]
А где можно почитать про это (практические приемы и советы)?
Увы, я практик в Oracle, в MySQL я больше теоретик. Мне самому хотелось бы видеть нестандартные, недокументированные (потому как там недокументированного - вагон, с офигенным боковым прицепом) приемы работы с MySQL. Так что сам был бы благодарен за такую ссылку :-). И вообще, за любую ссылку где есть реальный код для MySQL.
А по теме, я уже говорил, - конструкция FROM у опрераторов SELECT DELETE UPDATE практически одинакова (с 4.1, в 4.0 не совсем), что теоретически открывает широкие горизонты..... Проверил на практике - точно :-)
...
Рейтинг: 0 / 0
проблема с запросом
    #33207623
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Astron
А можно ли с помощью multi-delete выполнить удаление одним запросом запись из таблицы (t1) + все записи из связанной таблицы (t2) по внешнему ключу?

То, что пробовал (методом "тыка") ни к чему хорошему меня не привело :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
-- что-то вроде этого
delete from t1_alias Using t1 t1_alias, t2_alias USING t2 t2_alias
Where t1_alias.id1= 3  and t2_alias.fk_id1=t1_alias.id1

-- выдавало естесно ошибку
Error Code :  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 'USING t2 t2_alias

Where t1_alias.id1=3 and t2_alias.fk_id1=t1_alias.id1' at line  1 
( 0  ms taken)


-- думал, что можно сделать так
delete from t1, t2_alias USING t2 t2_alias
Where t1_alias.id1= 3  and t2_alias.fk_id1=t1_alias.id1

-- оказалось, что нет
Error Code :  1109 
Unknown table 't1' in MULTI DELETE
( 0  ms taken)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / проблема с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]