|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Есть 3 таблицы: ------------------ 1. Поступления PgKvsPpl199110500100199110520121101430100500103190600245 2. План PgKvsPpl119110500100019911052012101014310050001031906002450 3. Группа товаров KgvKvs1287110500128711052012513400007564301007564302001024190600 Pg - код подразделения Kvs - код вида товара Ppl - стоимость Kgv - код группы товаров Нужно получить суммы поступлений и планов по группам следующего вида: KgvPgSum_PlanSum_Post12871992210221756101500050010241032450245 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 16:03 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Стандартный запрос с группировкой. В чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 16:14 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Dima T, SELECT b65.kgv,b01.pg,SUM(b01.ppl/1000),SuM(b05.Znm12/1000) FROM b5200065 as b65 INNER JOIN b520001 as b01 ON (b65.kvs=b01.kvs) INNER JOIN b520005 as b05 ON (b65.kvs=b05.kvs) GROUP BY b65.ng,b65.kgv,b01.pg ---------------- b65 - группа товаров b01 - поступления b05 - планы Да потому что бред получается, не те суммы, если убрать один из джоинов, то сумма получается верной, а вот вместе ни как не хотят дружить :( В одной из таблиц, b01, или b05, может быть так что нет соответствий. Например: в b05 есть план по коду 110500, а в b01 нет поступлений по данному виду. На приведенных выше данных этот запрос отрабатывает нормально, но вот на реальных таблицах дает не те суммы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 17:45 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Jakudza, в форум по mysql. За последние 3 дня уже 3 или 4 темы было. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 17:52 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Не вник сразу, не совсем стандартный, но не особо сложный. Надо подзапрос. Если сделать допущение что в поступлениях может быть только то что есть в плане, то так: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 06:57 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Разобрался сам. Т.к. в планах сумма по виду может встречается только один раз, а в поступлениях сколько угодно, то соответственно ее суммировать нет необходимости. В итоге получаем: Код: plaintext 1. 2. 3.
Всем огромное спасибо за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 10:48 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Вы сделали стандартную ошибку в понимании того, что есть Join. Вы считаете, что и первый, и второй Join "присоединяются" к первой таблице. А на самом деле это не так. Можно сказать, что второй Join "присоединяется" к результату объединения первых двух таблиц. Как следствие, созданный Вами запрос будет корректно работать только и исключительно в том случае, если связь между таблицами вида один-к-одному. Если связь вида один-ко-многим, то произойдет "умножение" результата суммирования. Отсюда очевидный вывод заключается в том, что необходимо отдельно просуммировать данные по таблице поступлений и отдельно по таблице плана. И только третьим запросом объединять эти данные. Запрос Dima_T будет корректно работать только в случае, если хотя бы в одной из таблиц "план" или "поступления" на каждую пару pg и kvs есть только одна запись. Т.е. связь между этими таблицами вида один-ко-многим или много-к-одному. Если же связь между этими таблицами вида много-ко-многим, то этот запрос опять покажет не корректное значение. Другими словами, в самом общем случае, необходим запрос вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Если есть желание, можно попытаться реализовать это все в одном запросе с подзапросами. Но общая идея именно такая: отдельные запросы по плану и факту и последующее их объединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 10:50 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
егавторВы сделали стандартную ошибку в понимании того, что есть Join. Вы считаете, что и первый, и второй Join "присоединяются" к первой таблице. А на самом деле это не так. Можно сказать, что второй Join "присоединяется" к результату объединения первых двух таблиц. Как следствие, созданный Вами запрос будет корректно работать только и исключительно в том случае, если связь между таблицами вида один-к-одному. Если связь вида один-ко-многим, то произойдет "умножение" результата суммирования. Отсюда очевидный вывод заключается в том, что необходимо отдельно просуммировать данные по таблице поступлений и отдельно по таблице плана. И только третьим запросом объединять эти данные. Запрос Dima_T будет корректно работать только в случае, если хотя бы в одной из таблиц "план" или "поступления" на каждую пару pg и kvs есть только одна запись. Т.е. связь между этими таблицами вида один-ко-многим или много-к-одному. Если же связь между этими таблицами вида много-ко-многим, то этот запрос опять покажет не корректное значение. Другими словами, в самом общем случае, необходим запрос вида Это ты в какой фантастическойкнеге вычитал ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 13:06 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Ну3.14цЭто ты в какой фантастическойкнеге вычитал ? А тебе чего тут не понравилось? Троль? Владимир прав, я с оптимизацией немного перестарался, мой запрос работает если ВладимирМхотя бы в одной из таблиц "план" или "поступления" на каждую пару pg и kvs есть только одна запись тут только ошибочка не в "хотя бы в одной", а в обоих, поэтому предварительно нужна группировка как в примере от Владимира. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 13:24 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
Dima TНу3.14цЭто ты в какой фантастическойкнеге вычитал ? А тебе чего тут не понравилось? Троль?Бери выше, это прошёлмимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 17:20 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
tanglirDima Tпропущено... А тебе чего тут не понравилось? Троль?Бери выше, это прошёлмимо. ты, меня сученок, - спутал. я никогда не перелогиниваюсь и пишу всегда только под своим ником. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 17:39 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
>ты, меня сученок, - спутал. Что такое "сученок"? Если хотел меня оскорбить - то бегом учить русский язык! По-падонкафски я оскорбляюсь только в ПТ! >я никогда не перелогиниваюсь и пишу всегда только под своим ником. Таки да? Ну лан, теперь буду в курсе - у тебя ж в автоподписи этого нет :) Кстати, я тоже. ЗЫ. На "выше троля" обиделся что ль? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 18:21 |
|
Выборка из 3-х таблиц
|
|||
---|---|---|---|
#18+
tanglir>ты, меня сученок, - спутал. Что такое "сученок"? Если хотел меня оскорбить - то бегом учить русский язык! По-падонкафски я оскорбляюсь только в ПТ! >я никогда не перелогиниваюсь и пишу всегда только под своим ником. Таки да? Ну лан, теперь буду в курсе - у тебя ж в автоподписи этого нет :) Кстати, я тоже. ЗЫ. На "выше троля" обиделся что ль? иди пести в ПТ - там ты спец. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2011, 18:35 |
|
|
start [/forum/topic.php?fid=41&msg=37065187&tid=1584626]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 143ms |
0 / 0 |