Update поля таблицы из другой таблицы - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте уважаемыйе! Есть следующая задача: Существуют 2 таблицы "Клиенты" и "Платежи", дамп прилагаю:
-- phpMyAdmin SQL Dump
-- version 4.0.10deb1
-- [url]http://www.phpmyadmin.net[/url]
--
-- Хост: localhost
-- Время создания: Сен 12 2014 г., 14:43
-- Версия сервера: 5.5.38-0ubuntu0.14.04.1
-- Версия PHP: 5.5.9-1ubuntu4.3
 
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- База данных: `task_home`
--
 
-- --------------------------------------------------------
 
--
-- Структура таблицы `clients`
--
 
CREATE TABLE IF NOT EXISTS `clients` (
  `client_id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `credit` INT(11) DEFAULT NULL,
  PRIMARY KEY (`client_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
 
--
-- Дамп данных таблицы `clients`
--
 
INSERT INTO `clients` (`client_id`, `name`, `credit`) VALUES
(1, 'Vasily', NULL),
(2, 'Peter', NULL),
(3, 'Alex', NULL),
(4, 'Vladimir', NULL);
 
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Необходимо одним запросом (без использования вложенных) занести в поле `credit` таблицы "Clients" сумму всех платежей каждого пользователя. Я написал следующий запрос:
UPDATE clients, payments SET clients.credit = SUM(payments.value)
WHERE payments.client_id = payments.client_id
, но по непонятным мне причинам он выдает ошибку: " #1111 - Invalid use of group function". Что в моем запросе не так? Прошу помочь!
Попутно такой вопросик: есть ли на форуме специалист по mysql из Харькова? требуется решить небольшую задачку по mysql за вознаграждение.

Решение задачи: «Update поля таблицы из другой таблицы»

textual
Листинг программы
-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- [url]http://www.phpmyadmin.net[/url]
--
-- Хост: localhost
-- Время создания: Сен 16 2014 г., 18:20
-- Версия сервера: 5.5.38
-- Версия PHP: 5.3.10-1ubuntu3.14
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- База данных: `home_task`
--
 
-- --------------------------------------------------------
 
--
-- Структура таблицы `clients`
--
 
CREATE TABLE IF NOT EXISTS `clients` (
  `client_id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `credit` INT(11) DEFAULT NULL,
  PRIMARY KEY (`client_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
 
--
-- Дамп данных таблицы `clients`
--
 
INSERT INTO `clients` (`client_id`, `name`, `credit`) VALUES
(1, 'Vasily', NULL),
(2, 'Peter', NULL),
(3, 'Alex', NULL),
(4, 'Vladimir', NULL);
 
-- --------------------------------------------------------
 
--
-- Структура таблицы `payments`
--
 
CREATE TABLE IF NOT EXISTS `payments` (
  `payment_id` INT(11) NOT NULL AUTO_INCREMENT,
  `value` DECIMAL(11,0) DEFAULT NULL,
  `client_id` INT(11) NOT NULL,
  PRIMARY KEY (`payment_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
 
--
-- Дамп данных таблицы `payments`
--
 
INSERT INTO `payments` (`payment_id`, `value`, `client_id`) VALUES
(1, 10, 1),
(2, 11, 1),
(3, 9, 1),
(4, 8, 1),
(5, 5, 2),
(6, 6, 2),
(7, 7, 3),
(8, 8, 3),
(9, 14, 4),
(10, 13, 4);
 
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы