Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
1

Не передаются поля в подзапрос

17.09.2022, 09:06. Показов 1046. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую.
mysql 5

Не могу передать поле в подзапрос.
Пример:
MySQL
1
2
3
UPDATE tb
SET tb.Cost=(SELECT Cost FROM (SELECT Promo FROM tb2 WHERE tb2.Service=tb.ServiceID)A)
WHERE DocID=123
...
Дело в том что поле из UPDATE tb.ServiceID не передаётся дальше в подзапрос SELECT FROM tb2 и на этом приплыли. Пишет поле не найдено. Как это можно передать? Просто там очень много вложенных подзапросов ссылающихся на поля в UPDATE tb.

Причём на mysql 8 оно работает как надо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2022, 09:06
Ответы с готовыми решениями:

Oracle После несколько подзапрос не магу отфильтровать поля
Здравствуйте ребята.... ситуация такой , не знаю кто создал это БД и не знаю кто написал это...

Неверно передаются вычисляемые поля из Acceess в Excel
Добрый день! Есть большой запрос в Acceess, собирающий итог из нескольких таблиц, с тем чтобы...

Не передаются даные поля базового класса в класс наследник
Суть ошибки: базовый класс получает даные по товару(цену*количество=amount). В классе наследнике я...

Не передаются даные поля базового класса в класс наследник
мне нужно передать поле amount базового класса в наследник, и вывести основной чек на экран. Из-за...

25
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,117
17.09.2022, 13:18 2
Scally, А через JOIN'ы нельзя это записать?
0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
17.09.2022, 15:49  [ТС] 3
UPDATE
JOIN (SELECT FROM)
SET
WHERE

В SELECT уже никак поля из UPDATE не поподают

Без селектов никак. Они в подзапросах там с UNION ещё к тому-же.
Там агрегируется из разных таблиц с хитрыми условиями и сортировками. Только SELECT
0
1928 / 1163 / 423
Регистрация: 31.05.2012
Сообщений: 4,112
17.09.2022, 17:28 4
Цитата Сообщение от Scally Посмотреть сообщение
SELECT Cost FROM (SELECT Promo FROM tb2 WHERE tb2.Service=tb.ServiceID)A
а где Cost во вложенном подзапросе? А нет. Может так:
SQL
1
SET tb.Cost=(SELECT Promo FROM tb2 WHERE tb2.Service=tb.ServiceID)
к сведению - оно не прокатит если подзапрос вернет больше одной строки
0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
18.09.2022, 07:26  [ТС] 5
Это я все знаю. Запрос накидан для примера. Конечно в оригинале все алиасы строго соблюдены.
Ещё раз напишу, что в 8й версии работает, а в 5й нет.
Из этого вытекает вопрос: как передать поля от UPDATE в подзапросы?
И конечно там стоит LIMIT 1, что-б подзапрос вернул одно последнее значение цены.
0
1928 / 1163 / 423
Регистрация: 31.05.2012
Сообщений: 4,112
18.09.2022, 08:54 6
так показывай оригинальный запрос, а не запрос для примера да еще с ошибками
0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
18.09.2022, 10:19  [ТС] 7
Еще раз объясню, если не понятно. Проблема не в запросе, все работает на 8й версии.
Проблема как заставить работать на 5й. А ещё конкретнее - как передать поля из UPDATE во вложенные в него подзапросы.
Для этого не нужно даже преводить примеры.
Вопрос понятен с первого раза.
0
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,117
18.09.2022, 17:10 8
Scally, Я давно в каком-то мануале (не помню по какой СУБД и какой версии) читал, что конструкции UPDATE-SELECT не поддерживаются в должной мере, и их работоспособность не гарантируется. Так что вполне возможно, что это относится и к MySQL, и 5-я версия не поддерживает таких запросов.
И если необходимо использовать именно эту версию сервера, то надо либо переписывать конструкцию запроса, либо задействовать принципиально другой подход в разработке.
Т.е. ответ должен быть понятен с первого раза. И даже до постановки вопроса.
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
18.09.2022, 18:15 9
Цитата Сообщение от Scally Посмотреть сообщение
Еще раз объясню, если не понятно. Проблема не в запросе, все работает на 8й версии.
Ещё раз напишу, что в 8й версии работает, а в 5й нет.
А вот и не понятно, работает на 8й, так этих версий начиная от 8.0.0dmr до последней (8.0.28) достаточно много. А уж про 5 версию "воотще" говорить не стоит. Таковых доступных для скачивания с официального сайта до ... (очень много) начиная от 5.0.15 и заканчивая 5.7.38.
Цитата Сообщение от Scally Посмотреть сообщение
Для этого не нужно даже преводить примеры.
Вопрос понятен с первого раза.
Может тебе и понятен вопрос, даже подозреваю, что понятен с первого раза, а вот минимально самодостаточные примеры демонстрирующие ошибку привести было бы неплохо

Не по теме:

для примера посмотри на одно из моих сообщений об ошибке раздел How to repeat
и заметь указана конкретная версия MySQL сервера

0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
19.09.2022, 10:42  [ТС] 10
Joeymax, пойми пожалуйста. Ошибок нет. Ну нет и всё. Не нужен для этого мой пример. Ошибок нет. И ещё раз: Ошибок нет.
Есть простой вопрос: Как можно передать поля в подзапрос. Такой вопрос не подразумивает наличие ошибок. Ошибок нет.
И не нужно за меня решать, что мне надо всё переписать и не использовать подзапросы. Это не возможно. Такой функционал.

Обратите внимание пожалуйста на мой вопрос: Как можно передать поля в подзапрос? Пример был для понимания вопроса.

Версия 5я у хостинга. И ничего тут не поделать. Нет у него 8й и не предвидится.
0
1928 / 1163 / 423
Регистрация: 31.05.2012
Сообщений: 4,112
19.09.2022, 11:50 11
Цитата Сообщение от Scally Посмотреть сообщение
Как можно передать поля в подзапрос?
ну коль пишешь update с подзапросами должен знать что единственный способ передать ИмяИлиПсевдонимТаблцы.ИмяПоля. Всё. А судя по примеру возможно у тебя в запролсе наворочено огого. А показать - секрет. Ну и живи с ним ))
0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
19.09.2022, 11:53  [ТС] 12
Аватар, логика видимо не твой конёк. Вопроса бы не было, если-бы в подзапрос поля передавались.
А для танкистов: в 8й версии работает.
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
19.09.2022, 13:56 13
Цитата Сообщение от Scally Посмотреть сообщение
Joeymax, пойми пожалуйста.
Понятно, но давай переведем диалог в конструктивное русло. Я не буду посылать тебя читать Eric S. Raymond, а ты не будешь говорить, куда мне идти
Цитата Сообщение от Scally Посмотреть сообщение
Ошибок нет. И ещё раз: Ошибок нет.
Есть простой вопрос: Как можно передать поля в подзапрос. Такой вопрос не подразумивает наличие ошибок. Ошибок нет.
тогда еще раз
Цитата Сообщение от Joeymax Посмотреть сообщение
минимально самодостаточные примеры демонстрирующие ошибку привести было бы неплохо
Был не прав, признаю ошибок у тебя нет. Но ещё раз. И ещё раз, минимально самодостаточный пример демонстрирующий твою хотелку можешь привести.

Не по теме:

Например в таком виде (только для танкиста)
Таблица T1: (структура такая, содержит такие данные). Таблица T2: (структура такая, содержит такие данные), связь между таблицами такая (или таблицы не связаны).
Нужно обновить поле F1 в таблице T1, при условии, что поле F2 из таблицы T1 соответствует полю Fx таблицы T2 и только для тех полей таблицы T1 для которых поле Fn равно (больше, меньше) такому значению

1
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
19.09.2022, 14:50  [ТС] 14
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
UPDATE tb1
SET tb1.Cost=IFNULL((
  SELECT ActualCost FROM (
    SELECT tb2.Cost as ActualCost, as 0 SR FROM tb2 
    WHERE tb2.ServiceID=tb1.ServiceID
    ORDER BY dtCreate DESC
    LIMIT 1
 
    UNION
 
    SELECT tb3.Cost as ActualCost, as 1 SR FROM tb3 
    WHERE tb3.ServiceID=tb1.ServiceID
    ORDER BY dtCreate DESC
    LIMIT 1
 
    UNION ...
-- и ещё таблицы с подзапросами, и не такие простые, как tb2 b tb3 из которых надо получить цены по куче условий с использованием tb1.ServiceID в заданном порядке.
 
  )A
  ORDER BY SR
  LIMIT 1
), tb1.Cost)
WHERE tb1.DocumentID=123
0
Joeymax
19.09.2022, 15:54
  #15

Не по теме:

Браво!, салют!, восхитительно!, искренне ваш :)
Ибо это и есть самый, что называется, абсолютно правильный ответ по существу от самого настоящего, да там греха таить, изумительного, и даже сказочного! - танкиста.

0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
19.09.2022, 16:04  [ТС] 16
Я так понял, что толкового ответа на этот вопрос я не дождусь.
Столько умников, но никто не знает.

Пока сделал в два захода:
Одним заходом собираю данные ID и прочее из таблицы tb1 и на их основе создаю нужное количество UPDATE c этими значениями через ";"
0
385 / 224 / 83
Регистрация: 28.04.2022
Сообщений: 1,117
19.09.2022, 16:13 17
Scally, На мой вопрос тоже ответа нет: почему нельзя эту конструкцию переписать через JOIN?
0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
19.09.2022, 16:19  [ТС] 18
Ответ на этот вопрос есть:

"-- и ещё таблицы с подзапросами, и не такие простые, как tb2 b tb3 из которых надо получить цены по куче условий с использованием tb1.ServiceID и в заданном порядке."

Там подзапросы в подзапросе и выборка в одном невозможна, т.к своих JOIN там внутри хватает.
Расскажешь как в JOIN - LIMIT 1 поставить?
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
19.09.2022, 16:20 19
Цитата Сообщение от Scally Посмотреть сообщение
Столько умников, но никто не знает.
Так это же только ты на танке. Откуда нам знать, что какие у тебя боеприпасы
0
1 / 0 / 1
Регистрация: 04.01.2014
Сообщений: 16
19.09.2022, 16:22  [ТС] 20
Когда ответов нет - остаётся только отшучиваться.
0
19.09.2022, 16:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2022, 16:22
Помогаю со студенческими работами здесь

Не передаются даные поля базового класса в класс наследник
мне нужно передать поле amount базового класса в наследник, и вывести основной чек на экран. Из-за...

При передаче данных через AJAX не передаются некоторые поля формы
Я новичок, так что сильно не плюйтесь )) Возникла проблема при передаче данных формы обработчику...

DataMember: При наследовании от абстрактного класса передаются только поля базового типа
При наследовании от абстрактного класса передаются только поля базового типа, а не наследника. Код:...

Создаю новый тип поля, а значениия value не передаются - выводит пустой массив в сам шаблон
Что не правильно создаю новый тип поля а ззначениия мфдгу не передаются выводит пустой массив в сам...

В Debug режиме в VS-2012 данные передаются нормально, но при запуске без дебага возникают ошибки и данные не передаются
Всем доброе время суток. Есть проект, работающий на ASP.NET MVC с использованием Entity Framework....

Подзапрос
Есть таблица сотрудники. Надо вывести в одном запросе зарплату и новое поле класс (нищий если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru