Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Удаление с помощю LEFT JOIN


Автор: galkinsasha 27.6.2010, 10:30
Доброго времени суток...

Не проходит запрос
Код


DELETE FROM `kategory` LEFT JOIN `subkategory`  ON subkategory.id_kat=kategory.id_kat WHERE kategory.id_kat=45



Пишет ошибку:
#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 'LEFT JOIN `subkategory`  ON subkategory.id_kat=kategory.id_kat WHERE kategory.id' at line 1

но при этом запросна выборку проходит.
Код


SELECT * FROM `kategory` LEFT JOIN `subkategory`  ON subkategory.id_kat=kategory.id_kat WHERE kategory.id_kat=45



HELP ME  smile  smile 

Автор: Akina 27.6.2010, 20:52
Правильно. СУБД не понимает, откуда и что надо удалять.

Автор: Gluttton 27.6.2010, 23:14
galkinsasha, а так:
Код

DELETE `kategory` FROM `kategory` LEFT JOIN `subkategory` ON `subkategory.id_kat`=`kategory.id_kat` WHERE `kategory.id_kat`=45

будет работать?

Автор: galkinsasha 28.6.2010, 19:56
Gluttton 

И что Ваш запрос сделает? я не понимаю...

Akina Дак вроде правильно запрос составлен: удалить все записи в двух таблицах связаных за ід_кат где ід_кат=45

Как правильно составить запрос?

Если мой запрос не понимает то как же СУБД понимает такой запрос
Код

DELETE FROM `kategory`WHERE `kategory.id_kat`=45


Добавлено через 9 минут и 40 секунд
Всем спасибо за помощь Сделал так, прошел запрос smile  smile 
Код



DELETE FROM `kategory`, `subkategory` USING `kategory` INNER JOIN `subkategory` ON subkategory.id_kat = kategory.id_kat WHERE kategory.id_kat=46 

Автор: Akina 28.6.2010, 21:01
Цитата(galkinsasha @  28.6.2010,  20:56 Найти цитируемый пост)
Сделал так, прошел запрос 

 smile 
То есть тебе всё равно, что удалять, лишь бы удалилось? логика исходного и конечного запроса неэквивалентны...

Цитата(galkinsasha @  28.6.2010,  20:56 Найти цитируемый пост)
Как правильно составить запрос?

Не использовать JOIN, заменяя его на условия отбора WHERE.

Автор: galkinsasha 28.6.2010, 23:09
Мне нужно удалить все данные из двух таблиц связаные  id_kat где  id_kat=45

Автор: Gluttton 28.6.2010, 23:18
Цитата(galkinsasha @  28.6.2010,  23:09 Найти цитируемый пост)
все данные из двух таблиц связаные

А каскадное удаление не проще будет в реализации?

Автор: galkinsasha 28.6.2010, 23:45
Не знаю. Я работаю в phpmyadmin чето я не видел там таких настроек. В IB Experte(firebird) видел, а сдесь по суте и связей как таковых нету))

Или мы о разных вещах говорим?

Автор: Gluttton 28.6.2010, 23:55
Цитата(galkinsasha @  28.6.2010,  23:45 Найти цитируемый пост)
Или мы о разных вещах говорим? 

Затрудняюсь ответить, не приходилось сталкиваться с phpmyadmin.
Но уверен, что при работе через командную строку будут доступны все параметры smile .

Автор: Akina 29.6.2010, 08:04
Цитата(galkinsasha @  29.6.2010,  00:09 Найти цитируемый пост)
нужно удалить все данные из двух таблиц связаные  id_kat где  id_kat=45 

Тогда последний запрос верный. А первый - неверен логически, из-за Left Join.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)