Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
Здравствуйте. помогите плиз не могу никак решить как составить запрос.
есть 2 таблицы
1 таблица id1,name1,massa1 (range)
2 таблица id2,kodid2,name2,massa2 (box)
таблицы сопоставимы по полям id1-kodid2.

Нужно в первую таблицу в massa1 занести сумму столбца massa2, сгруппированному по kodid2
Как сгруппировать разобрался:
select KODID2,sum(MASSA2) from BOX group by KODID2 , а вот заполнить первую не получается.
Есть еще одно условие INSERT не подходит , т.к ID1 и NAME1 не меняется , а у них надо менять тока massa1.

пробовал
update range , (select sum(massa2) as massa from box group by kodid2) tt set range.massa1=tt.massa where range.id=tt.kodid2;

выдает ошибку Invalid token.Dynamic SQL Error.SQL error code = -104.Token unknown - line 1, column 14. Ругается на запятую после "," после range. Возможно FIREBIRD так не может.

update range set massa1=(select sum(massa2) from box as BB group by kodid2) where (range.id1=BB.kodid2)

Кричит что нет поля BB.kodid2
3 окт 17, 03:48    [20837770]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
982183
Member

Откуда:
Сообщений: 1337
Мне вот тут помогли. Но софт другой

20760304
3 окт 17, 04:13    [20837773]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 4375
Руководство по sql в fb читать не пробовали:
INSERT INTO cars
SELECT * 
FROM new_cars


А пример с фокса крайне неудачный
3 окт 17, 04:53    [20837778]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 4375
И расскажите зачем group by в расчете суммы
3 окт 17, 04:56    [20837780]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
Romansochi,

оператор MERGE тебе поможет
3 окт 17, 07:05    [20837811]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
alex_p_n
Member

Откуда: Дніпро
Сообщений: 134
Симонов Денис
Romansochi,

оператор MERGE тебе поможет

Смотря, какой у него Огнептиц - MERGE поддерживается только с 2.5, если мне память не изменяет
3 окт 17, 09:06    [20837919]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
Gallemar
Руководство по sql в fb читать не пробовали:
INSERT INTO cars
SELECT * 
FROM new_cars


А пример с фокса крайне неудачный


Я вроде ж написал что insert не подходит... мне не надо вставлять новые записи мне надо исправить существуещее , в sql подобного примера не нашел поэто му и спросил. Точнее если не использовать group by , то проблем нет а вот с group by.....
3 окт 17, 09:27    [20837962]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
alex_p_n,

изменяет. MERGE появился в 2.1. Если нету MERGE можно воспользоваться EXECUTE BLOCK начиная с 2.0
3 окт 17, 09:31    [20837975]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 4375
Romansochi

Я вроде ж написал что insert не подходит... мне не надо вставлять новые записи мне надо исправить существуещее , в sql подобного примера не нашел поэто му и спросил. Точнее если не использовать group by , то проблем нет а вот с group by.....

Ты много чего написал. Range в Firebird нет.
3 окт 17, 09:31    [20837976]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
Gallemar,

range это таблица
3 окт 17, 09:32    [20837980]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 4375
Симонов Денис
Gallemar,

range это таблица

Точно. Мне вообще весь код непонятен. Особенно
select sum(massa2) as massa from box group by kodid2
.
Как будто знакомые слова ищутся гуглом и подставляются.
3 окт 17, 09:38    [20837994]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
Gallemar
И расскажите зачем group by в расчете суммы

мне нужна сумма не по всему столбцу а по строкам которые относятся к одному тип

болтики в разных коробка - общая сумма
шурупы в разных коробках - общаяя сумма

К сообщению приложен файл (123.xlsx - 11Kb) cкачать
3 окт 17, 09:41    [20838009]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
Romansochi,

ага, то есть сумма тебе нужна, а к чему эта сумма относится нет? Странно
3 окт 17, 09:45    [20838022]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
Gallemar
Симонов Денис
Gallemar,

range это таблица

Точно. Мне вообще весь код непонятен. Особенно
select sum(massa2) as massa from box group by kodid2
.
Как будто знакомые слова ищутся гуглом и подставляются.


странно вроде понятно таблица box считается кол-во по группам и заносится в вычисляемое поле massa

1 10
1 0
1 0
2 20
2 20
3 10
3 20
3 30

выводит

1 10
2 40
3 60
3 окт 17, 09:45    [20838026]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
alex_p_n
Симонов Денис
Romansochi,

оператор MERGE тебе поможет

Смотря, какой у него Огнептиц - MERGE поддерживается только с 2.5, если мне память не изменяет

у меня 2.5 версия
3 окт 17, 09:46    [20838027]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
Romansochi
выводит

1 10
2 40
3 60


врёшь. Нет у тебя в select столбца kodid2
3 окт 17, 09:48    [20838035]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
m7m
Member

Откуда: Украина, Мариуполь
Сообщений: 1213
Romansochi
update range set massa1=(select sum(massa2) from box as BB group by kodid2) where (range.id1=BB.kodid2)



update range r
  set r.massa1=(select sum(b.massa2) from box b  where B.kodid2 = r.id1)


Ну наверное как-то вот так
3 окт 17, 09:48    [20838036]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
Симонов Денис
Romansochi,

оператор MERGE тебе поможет


с мерге чтото не получается ... group by мешает
а в цикле не хочу делать записей когда много будет тормозить
3 окт 17, 09:52    [20838052]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
Romansochi,

показывай как делал
3 окт 17, 09:53    [20838056]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
Симонов Денис
Romansochi
выводит

1 10
2 40
3 60


врёшь. Нет у тебя в select столбца kodid2


нету , я просто пронумеровал

select kodid2,sum(massa2) as massa from box group by kodid2

Вот так будет то что я написал , но в update нужны тока расчеты по massa2 поэтому в запросе update небыло поля kodid2
3 окт 17, 09:55    [20838065]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
Симонов Денис
Romansochi,

ага, то есть сумма тебе нужна, а к чему эта сумма относится нет? Странно


сорри трудно обьяснить для себя четко вижу... болтики нужно кол-во во всех разных коробках
, шурупы , нужно кол-во во всех разных коробках.

допустим доложил болтиков соответственно общее кол-во болтиков должно измениться...

для одной записи конечно можно было изменять сразу же когда изменяется и кол-во в болтиках так у меня щас работает .. но мне надо чтоб я нажал кнопку и в первой таблице общее колво изменилось по всем наименованием ...
3 окт 17, 10:00    [20838077]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
Romansochi,

беда... Не ужели так сложно посмотреть пример оператор merge?

merge into range r
using (select select sum(massa2) as massa, kodid2 from box group by kodid2) b
on b.kodid2 = r.id1
when matched then
  update set massa1 = b.massa
3 окт 17, 10:04    [20838085]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Romansochi
Member

Откуда:
Сообщений: 10
m7m
Romansochi
update range set massa1=(select sum(massa2) from box as BB group by kodid2) where (range.id1=BB.kodid2)



update range r
  set r.massa1=(select sum(b.massa2) from box b  where B.kodid2 = r.id1)




Ну наверное как-то вот так

о спасибо вроде работает ... чтото я не подумал что группирование и так будет если связать 2 таблицы
щас буду проверять
3 окт 17, 10:05    [20838090]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 256
Симонов Денис
Romansochi,

оператор MERGE тебе поможет


Мдя. В предыдущей жизни я бы, конечно, прошёлся насчёт проктологии. Сейчас просто скажу, как Айболит Бармалею в пещере - обилие возможностей тебя погубит.
3 окт 17, 14:26    [20839080]     Ответить | Цитировать Сообщить модератору
 Re: Как заполнить одну таблицу данными из второй таблицы  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 256
m7m
Romansochi
update range set massa1=(select sum(massa2) from box as BB group by kodid2) where (range.id1=BB.kodid2)



update range r
  set r.massa1=(select sum(b.massa2) from box b  where B.kodid2 = r.id1)


Ну наверное как-то вот так


Я бы ещё к селекту коалеску привинтил. Из агрегатов null при отсутствии данных не возвращает только count.
3 окт 17, 14:28    [20839085]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить