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

SELECT в UPDATE (Запрос в запросе). Умножение полей таблиц между собой

05.12.2016, 02:25. Показов 7005. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет уважаемые посетители этого форума!
Не раз он меня выручал в сложных ситуациях)
Надеюсь, что и в этот раз выручит)
Есть запрос:
К примеру нужно выбрать два поля таблицы (одно с одной, другое с другой) и нужно перемножить значения этих полей между собой и вернуть в нужное поле ТОЛЬКО с помощью UPDATE.
Вот как это я пытаюсь сделать:
SQL
1
2
3
4
5
"UPDATE grocery_supermarket_manager.stock AS stock, " + 
                "(SELECT price_for_one FROM grocery_supermarket_manager.products WHERE id_products = 1) AS products, " +
                "(SELECT quantity FROM grocery_supermarket_manager.stock WHERE id_stock = 1) AS st, " +
                           " SET stock.price = products.price_for_one * st.quantity" +
                          " WHERE stock.id_stock = 1"
Выдаёт следующую ошибку:
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 'SET stock.price = products.price_for_one * st.quantity WHERE stock.id_stock = 1' at line 1

Что мне посоветуете (только адекватные решения для этого вопроса)?
Что использую MySQL, C#, .NET, SQLconnector for NET.
В программе нету ошибок только в запросе.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2016, 02:25
Ответы с готовыми решениями:

Умножение полей из разных таблиц
нужно перемножить цену из таблицы Phones на кол-во из таблицы Sales и результат занести в поле sum...

Умножение полей из разных таблиц
Каким образом можно умножить поле weight из таблицы consist на поле price_materials из таблицы...

Умножение колонок int*float при запросе SELECT (неправильный результат)
Делаю следующий запрос: SELECT gold_price*price FROM items WHERE id=100; Получаю результат:...

Подскажите запрос UPDATE ... SELECT
Здравствуйте. Есть таблица с каталогом товаров. В этой таблице есть поля ЦЕНА и ВАЛЮТА(RUB, USD,...

4
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
05.12.2016, 02:34 2
как-то так
SQL
1
2
3
4
5
6
UPDATE grocery_supermarket_manager.stock AS stock
SET stock.price =
(SELECT price_for_one FROM grocery_supermarket_manager.products WHERE id_products = 1)
*
(SELECT quantity FROM grocery_supermarket_manager.stock WHERE id_stock = 1)
WHERE stock.id_stock = 1
1
5 / 4 / 3
Регистрация: 02.12.2012
Сообщений: 80
05.12.2016, 22:51  [ТС] 3
Не хочет(((
Выдаёт
Error Code: 1093. You can't specify target table 'stock' for update in FROM clause
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
05.12.2016, 23:16 4
а так
SQL
1
2
3
4
5
6
UPDATE grocery_supermarket_manager.stock AS tbl
SET tbl.price =
(SELECT price_for_one FROM grocery_supermarket_manager.products WHERE id_products = 1)
*
(SELECT quantity FROM grocery_supermarket_manager.stock AS tbl2 WHERE tbl2.id_stock = 1)
WHERE tbl.id_stock = 1
или в песочнице размести демо данные
0
5 / 4 / 3
Регистрация: 02.12.2012
Сообщений: 80
06.12.2016, 02:43  [ТС] 5
К примеру нашёл вот это:

UPDATE tbl AS a
INNER JOIN tbl AS b ON ....
SET a.col = b.col

---------------------------------------------

UPDATE tbl SET col = (
SELECT ... FROM (SELECT.... FROM) AS x);

Как второй попытаться написать?

Добавлено через 2 минуты
Error Code: 1093. You can't specify target table 'tbl' for update in FROM clause

Добавлено через 2 минуты
или 1 вариант

Добавлено через 2 часа 51 минуту
Решено!
Но ещё усовершенствовать буду)))
SQL
1
2
3
4
5
6
UPDATE grocery_supermarket_manager.stock AS T1,
      (SELECT price_for_one
        FROM grocery_supermarket_manager.products
        WHERE id_products = 1) AS T2 
  SET T1.price = T2.price_for_one + T1.quantity
WHERE T1.id_stock = 1;
Добавлено через 16 минут
Итак, что делает этот запрос?!
Выбираем таблицу в которой необходимо посчитать нужное нам поле.
Потом выбираем конкретную строку поля с одной таблицу
А затем выбираем конкретную строку поля с другой таблицы
В SET пишем нужное нам поле (ячейку) столбца для которой нужно посчитать значение
MySQL
1
2
3
4
5
6
7
8
9
UPDATE grocery_supermarket_manager.stock AS T1,
      (SELECT price_for_one
        FROM grocery_supermarket_manager.products
        WHERE id_products = 1) AS T2,
      (SELECT quantity
        FROM grocery_supermarket_manager.stock
        WHERE id_stock = 1) AS T3
  SET T1.price = T2.price_for_one * T3.quantity
WHERE T1.id_stock = 1;
Надеюсь кому-то пригодиться)
0
06.12.2016, 02:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2016, 02:43
Помогаю со студенческими работами здесь

UPDATE и SELECT немогу связать запрос
UPDATE `radacct`SET `AcctStopTime`=now() WHERE `AcctStopTime` IS NULL AND `RadAcctId` = ( ...

Запрос insert в запросе select
Можно ли сделать такой запрос? SELECT id, (INSERT INTO wall_bought(wall, user)...

select-insert-update в одном запросе
мне нужен был запрос такого рода - проверить есть ли такая запись, если есть то к той записи просто...

Умножение двух полей в запросе
Пытаюсь умножить два поля ругается что неверный параметр "*" ВЫБРАТЬ...


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

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