SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.07.2017 12:08:24

Pantela777
Завсегдатай
Зарегистрирован: 06.06.2016
Сообщений: 39

Обновлять данные через JOIN

Не актуально...

Отредактированно Pantela777 (05.03.2018 14:03:54)

Неактивен

 

#2 19.07.2017 14:45:49

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Обновлять данные через JOIN

что-то вроде этого

UPDATE base b
  JOIN (SELECT base_id, SUM(amount_fee) amount_fee FROM transactions WHERE loan_type = 1 GROUP BY 1) t ON b.id=t.base_id
set short_amount = amount_fee;

UPDATE base b
  JOIN (SELECT base_id, SUM(amount_fee) long_amount FROM transactions WHERE loan_type = 2 GROUP BY 1) t ON b.id=t.base_id
set long_amount  = long_amount;

Неактивен

 

#3 19.07.2017 15:55:07

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Обновлять данные через JOIN

немного напутали с названиями полей, посмотрите внимательно.

3.

UPDATE base b
  JOIN (SELECT base_id,
    SUM(CASE WHEN loan_type = 1 then amount_fee END) as sum_fee_st,
    SUM(CASE WHEN loan_type = 2 then amount_fee END) as sum_fee_ln
  FROM transactions GROUP BY 1) t ON b.id=t.base_id
  SET b.short_amount = sum_fee_st, b.long_amount  = sum_fee_ln;

Отредактированно klow (19.07.2017 15:56:36)

Неактивен

 

#4 19.07.2017 16:46:04

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Обновлять данные через JOIN

Исправил

UPDATE base b
  JOIN (SELECT base_id,
    SUM(CASE WHEN loan_type = 1 then amount_fee END) as sum_fee_st,
    SUM(CASE WHEN loan_type = 2 then amount_fee END) as sum_fee_ln
  FROM transactions
  WHERE loan_type IN (1,2)
  GROUP BY 1) t ON b.id=t.base_id
  SET b.short_amount = IFNULL(sum_fee_st, b.short_amount), b.long_amount  = IFNULL(sum_fee_ln,b.long_amount);

1. Что мешает добавить WHERE base.status = 3?
2. Если по base.status есть индекс то смысла не имеет. Если индекса нет, можно добавить если точно знаете, что будет только одно значение.

Отредактированно klow (19.07.2017 16:46:37)

Неактивен

 

#5 19.07.2017 17:20:43

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Обновлять данные через JOIN

Проверьте тип данных в столбце long_amount.
1. Если поле base.id уникальное (ключевое), то смысла в WHERE base.loan_type IN (1,2) нет никакого. Даже есть сомнение в необходимости поля base.loan_type. Скорее всего это ошибка.
2. Аналогично и по base.status и LIMIT не нужны если поле base.id уникальное (ключевое).

Отредактированно klow (19.07.2017 17:28:27)

Неактивен

 

#6 22.07.2017 08:15:26

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Обновлять данные через JOIN

Добрый день!
Если поле  loan_type используется в двух таблицах, то, вероятнее всего, нарушается принцип реляционных баз данных, что данные не должны повторятся.
Условие base.status = 3 у меня вызывает сомнение, но не зная деталей однозначный вывод сделать сложно.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson