17.09.2019, 04:18 [+3 UTC]
в нашей команде: 3 821 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
12.09.2019, 08:17

Последний вопрос:
16.09.2019, 18:39
Всего: 150315

Последний ответ:
16.09.2019, 16:39
Всего: 259016

Последняя рассылка:
16.09.2019, 16:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
22.08.2010, 11:48 »
alexandr07
Спасибо Андрей Владимирович за отличный ответ [вопрос № 179743, ответ № 262832]
22.08.2009, 23:26 »
Владимир Лазурко
Мне очень понравилась функция отправки СМС-сообщений - удобно!
27.08.2018, 13:08 »
dar777
Спасибо огромное уважаемый преподаватель! Очень Вам благодарен за квалифицированную помощь. [вопрос № 193487, ответ № 276654]

РАЗДЕЛ • Базы данных

Установка и настройка серверов баз данных, таблицы и запросы.

[администратор рассылки: Коцюрбенко Алексей Владимирович (Модератор)]

Лучшие эксперты в этом разделе

solowey
Статус: Бакалавр
Рейтинг: 311
Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 64
Megaloman
Статус: Советник
Рейтинг: 37

Перейти к консультации №:
 

Консультация онлайн # 70740
Раздел: • Базы данных
Автор вопроса: Олег Владимирович
Отправлена: 13.01.2007, 13:52
Поступило ответов: 2

Здравствуйте!
Вопрос по 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 включительно до конца запроса.
Как быть?

Состояние: Консультация закрыта

Ответ # 136291 от Архангельский Андрей Германови

Здравствуйте, Олег Владимирович!
Запрос

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

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 136295 от Загиров Рустам

Здравствуйте, Олег Владимирович!
У вас в выражении :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

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 70740
Олег Владимирович

# 1

= общий = | 13.01.2007, 16:33

`i` в обеих таблицах INT AUTO_INCREMENT PRIMARY KEY `s` служит для связи со строкой таблицы `second` и тоже имеет тип INT Запрос SELECT `first`.`i` FROM `first`, `second` WHERE `first`.`s`=`second`.`i` AND `second`.`age`>= 18 работает. Вряд ли он бы работал при `first`.`s` и `second`.`i` разных типов.

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.19727 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35