|
|
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Результат этого запроса в два раза больше, чем есть на самом деле. Проверял, что там происходит так: Код: plaintext 1. 2. Количество возвращенных строк = кол-во нужных строк в таблице cash * кол-во нужных строк в таблице calc почему так происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 00:54 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
SELECT cash.* as a - это опечатка :) следует читать как SELECT cash.* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 01:11 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
автор писал:Проверял, что там происходит так: Там - это где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 14:20 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Проверял, что происходит в запросе. Первый вариант возвращал одно только число - вот я и посмотрел, что "там" со строками происходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 14:29 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Даны два запроса. Первый неправильный, а второй "там". Каким образом второй получен из первого? И откуда известно, что второй правильный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 14:34 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Саныч,первый запрос с Sum, второй почти такой же ,но без суммирования,возвращающий все записи.Умение внятно формулировать свои мысли не относится к главным достоинствам VsevolodV (впрочем как и к моим), но в данном случае все понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 14:41 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Каким образом второй получен из первого? SELECT cash.* вместо SELECT sum(cash.эквивалент1) as a И откуда известно, что второй правильный? Просто я посмотрел, что происходит со строками при таком джойне и условии where. Он неправильный - в нем ровно в два раза больше строк, чем должно быть,т.е. Код: plaintext 1. 2. 3. 4. ID_OPER - порядковый номер операции Если в таблицу Calc добавить еще одну строку, удовлетворяющую условию, то запрос даст нам в три раза больше строк, т.е. будет Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 14:42 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
2 VsevolodV Скорее всего у тебя в какой то из таблиц есть дубликаты, или джойнишь неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 14:49 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
ID_OPER - ключевое поле Пробовал INNER JOIN, LEFT JOIN и RIGHT JOIN - результат не изменялся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 14:53 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Ну и где в твоих запросах используется ID_OPER ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 15:02 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Так его вроде и не нужно использовать - таблицы связываются по полю [Реф №] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 15:06 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Провел эксперимент: Новый МДБ. Создал в нем две таблици Calc и Cash: Calc: Код: plaintext 1. 2. 3. Cash: Код: plaintext 1. 2. Запрос: Код: plaintext 1. 2. Результат запроса: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 15:25 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Vsevolod,читай мой пост от 14:49 У тебя 3 строкам из Calc соответствуют 2 строки из Cash.В результате соединения ты получишь (и получаешь) 6 строк результирующего набора. И объясни мне, зачем хранить в таблицах дубликаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 15:49 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Что значит дубликат? Если имеется ввиду, что одна запись записана два раза, то такого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 18:00 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться. По-моему, сам запрос "в корне" составлен неправильно. Нужно вот что: Если в строках с определенным [Реф №] таблицы Calc есть хотя бы одна строка, в которой статус = "Получено", то по этому [Реф №] нужно посчитать sum(cash.эквивалент1) из таблицы Cash соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 19:16 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Вот так по-моему будет правильнее: Код: plaintext 1. 2. Но тут проблема в том, что почему то этот запрос выполняется втечение 30 секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 19:28 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Вот так работает быстро: Код: plaintext 1. 2. Но если этот запрос вставить в основной запрос, то работа очень сильно замедляется: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Что тут можно предпринять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 19:58 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
В зависимости от условия WHERE запрос может выполняться 5 минут и более :( Должны же быть какие-нибудь пути оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 16:05 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
В итоге я прихожу к выводу, что и этот запрос не работает :( Допустим в таком варианте поле "Получено_пост" всегда равняется 0 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Я уже вообще ничего не понимаю :( Почему не работает??? Что делать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 16:26 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
автор писал:between #14/09/2003# and #20/09/2003# В селектах даты пишутся по MMDDYYYY! Этому посвящена половина форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 16:29 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Ой! Забыл :) Но это не влияет на расчет вышеуказанного поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 16:39 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:05 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Работает быстро, но поле Получено_пост = NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:16 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Предыдущего поста НЕ БЫЛО :) Я забыл t.[реф №]. --- работает долго! ОЧЕНЬ ДОЛГО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:17 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
А пробовал IIF вместо NZ. Функции в запросах - штука о-о-оч-ч-ч-чень тормозная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:31 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Не пробовал. А надо ли? Вот такая строка сама по себе отрабатывается моментально: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:33 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
А весь запрос без этой строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:36 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Без нее работает быстро! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:36 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
WHERE Cash.[Реф №] = (select distinct [реф №] from calc where Calc.Статус='получено' AND Calc.[Реф №]= t.[Реф №])? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:44 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Sum(Nz(Cash.Эквивалент1,0)) FROM cash, Calc WHERE (Calc.[Реф №] = t.[Реф №] AND Calc.Статус='получено') AND (Cash.[Реф №] = Calc.[Реф №]) ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:57 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Считает быстро, но вместо 1985,9 в поле число 5957,8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 18:01 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Тут идет такое же дублирование как и то, о котором я говорил вначале топика. Результат превышает реальный ответ ровно в 4 раза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 18:09 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Точнее в 3 раза :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 18:10 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Повторю вопрос для вновь прибывших: Есть нормально работающий запрос Код: plaintext 1. 2. 3. Но, если этот запрос вставить в другой запрос, то скорость замедляется в ДЕСЯТКИ раз Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Как оптимизировать такой запрос??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 18:24 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Опечатка во втором запросе: вместо "TOP 1" д.б. distinct ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 18:26 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
>>то скорость замедляется в ДЕСЯТКИ раз ничего удивительного. Для _каждой_ записи конечного запроса вычисляется по нескольку группировочных запросов. Если задача сформулирована правильно, то есть например такой способ: 1. предположим, что полное число [реф №] невелико. Тогда вместо вычисления запросов вида {SELECT Nz(sum(calc.Эквивалент2)...} для _каждой_ записи общего запроса надо выполнить некий запрос с ГРУППИРОВКОЙ по [реф №], а уж его цеплять внешним джойном к результирующему запросу. Можно даже складирвать результаты группировки в темповую таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 10:42 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если обрабатывать большое количество записей, то работает очень долго. Есть ли способы ускорения этого запроса (например, выполнение по частям или что-нибудь еще)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 01:07 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
А почему бы не сделать группировочные запросы для каждой таблицы, по которой надо посчитать сумму? А потом использовать RIGHT JOIN. По крайней мере для таблиц cash и bank окажется по одному запросу вместо двух в приведенном примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 10:23 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Работает очень быстро, но появляется проблема из-за которой я и завел этот топик: значения больше реальных в 12 раз (это не постоянное число раз). Причем, чем меньше "Join'ов" тем в меньшее число раз полученное значение превышает реальное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 15:16 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Я немного не об этом ;) Можно же сделать для каждой из нужных таблиц _отдельный_ запрос с группировкой по нужному полю, например: Код: plaintext 1. и соединить его через RIGHT JOIN с основной таблицей! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 15:28 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
В таком случае нужно заводить массу хранимых запросов, а мне желательно сделать это все в программе (этот запрос служит для открытия рекордсета). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 15:57 |
|
||
|
Дублирование данных в запросе
|
|||
|---|---|---|---|
|
#18+
Для данного запроса получится всего три запроса (по одному к каждой вспомогательной таблице). И, между прочим, сохраненные запросы должны поднять быстродействие. ИМХО здесь не получится "и рыбку съесть, и..." Впрочем, наше дело предложить... Других выходов все равно не предвидится, так что решай сам. Мне больше предложить нечего. Кстати, я бы отказался от такого наименования поля как "№ реф". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 16:13 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1677941]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
93ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 496ms |

| 0 / 0 |
