04.06.2020, 06:32 [+3 UTC]
в нашей команде: 4 588 чел. | участники онлайн: 1 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.89 (25.04.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
31.05.2020, 09:51

Последний вопрос:
03.06.2020, 14:00
Всего: 152561

Последний ответ:
03.06.2020, 19:52
Всего: 260244

Последняя рассылка:
03.06.2020, 21:45

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

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

Наша кнопка:

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

Отзывы о нас:
21.02.2019, 12:52 »
dar777
Это самое лучшее решение! [вопрос № 194663, ответ № 277499]
05.11.2009, 12:44 »
Dimon4ik
Спасибо большое за объяснение материала, а также за код программы! [вопрос № 173965, ответ № 256197]

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

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

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

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

Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 1697
solowey
Статус: Профессионал
Рейтинг: 462
Delph
Статус: 3-й класс
Рейтинг: 317

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

Консультация онлайн # 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.14658 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.89 от 25.04.2020
Версия JS: 1.45 | Версия CSS: 3.39