Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 205
от 18.01.2007, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 399, Экспертов: 50
В номере:Вопросов: 1, Ответов: 2


Вопрос № 70740: Здравствуйте! Вопрос по MySQL 5 Встала задача при выборке/удалении данных использовать вложенные подзапросы. Как правильно это делать? My attempts: В самоучителе по MySQL (во всех, что попадались мне на глаза) написано, что она п...

Вопрос № 70.740
Здравствуйте!
Вопрос по MySQL 5
Встала задача при выборке/удалении данных использовать вложенные подзапросы. Как правильно это делать?

My attempts:
В самоучителе по MySQL (во всех, что попадались мне на глаза) написано, что она поддерживает вложенные запросы SELECT. Даже приведён пример -
SELECT `i` FROM `first` WHERE `s` IN (SELECT `i` FROM `second` WHERE `age`>18)
Но, пытаясь проделать нечто аналогичное, получаю ошибку - "You have an error in your SQL near 'SELECT `i` FROM `second` WHERE `age`>=18' at line 1 ..." Спрашивается: как же правильно?

Далее, в приведённом случае сложный запрос можно заменить обычным SELECT из нескольких таблиц: SELECT `first`.`i` FROM `first`, `second` WHERE `first`.`s`=`second`.`i` AND `second`.`age`>=18
Но что делать, когда на основании вложенного запроса принимается решение об удалении записей?
Пробовалось следующее:
DELETE FROM `first` WHERE `s` IN (SELECT `i` FROM `second` WHERE `age`<18)
Ошибка такая же, как приведена выше.
DELETE FROM `first`, `second` <...> - не работает, выдаёт ошибку, да и по логике понятно - нет смысла удалять что-то из создаваемой временной таблицы. Вариант (опять-таки из самоучителя)
DELETE FROM `first` USING `first`, `second` WHERE `first`.`s`=`second`.`i` AND `second`.`age`<18
в ошибке цитирует всё от USING включительно до конца запроса.
Как быть?
Отправлен: 13.01.2007, 13:52
Вопрос задал: Олег Владимирович (статус: 10-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Олег Владимирович!
Запрос

Select Fld1 from Table1 where fld2 in (Select Fld3 from Table2 where Age>18)

Означает выбрать из таблицы1 строки, значения поля Fld2 которых существуют в результатах запроса указанного в скобках (Table2)
Ошибка может быть в том что типы данных Fld2 и Fld3 не совпадают, а MySQL не детализирует ошибки.

Подробнее об этих операторах см. Мартин Грабер "Понимание SQL" изд.Лори - классическая книга, в которой все очень подробно разжевано.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 13.01.2007, 14:14

Отвечает: Загиров Рустам
Здравствуйте, Олег Владимирович!
У вас в выражении :SELECT `i` FROM `first` WHERE `s` IN (SELECT `i` FROM `second` WHERE `age`>18)
сравнивается поле `s` и `i`, они наверное разного типа. Наверное, надо такой запрос:
SELECT `i` FROM `first` WHERE `i` IN (SELECT `i` FROM `second` WHERE `age`>18)

---------
Этот мир обречён на нас
©Сергей Маврин
Ответ отправил: Загиров Рустам (статус: Специалист)
Ответ отправлен: 13.01.2007, 14:20


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.40 beta от 14.01.2007
Яндекс Rambler's Top100

В избранное