telepath |
Отправлено: 01.02.2005, 17:59 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Доброго времени суток. Не могу понять ошибку, есть sql запрос:
CODE | SELECT CODE_ID, sum(SUMW), sum(SUMB) FROM RES
WHERE REC_ID IN (
SELECT REC_ID FROM REC WHERE (
ORG_ID=1
OR ORG_ID=2
OR ORG_ID=3
OR ORG_ID=4
OR ORG_ID=5
OR ORG_ID=6
OR ORG_ID=7
OR ORG_ID=8
OR ORG_ID=9
OR ORG_ID=10
OR ORG_ID=11
OR ORG_ID=12
OR ORG_ID=13
OR ORG_ID=14
OR ORG_ID=15
OR ORG_ID=16
OR ORG_ID=18
OR ORG_ID=19
OR ORG_ID=20
OR ORG_ID=21
OR ORG_ID=22
OR ORG_ID=23
OR ORG_ID=24
OR ORG_ID=25
) AND (
PER_ID=1
) AND (
YEARS_NUM=2004
) AND (
TYP_ID=2
)
) GROUP BY CODE_ID |
как я понимаю возвращаемая таблица не может иметь кол-во записей больше чем значений CODE_ID, но возвращает больше. Почему? Запрос в IB Expert работает нормально в билдере в FIBplus DataSet нет |
|
Guest |
Отправлено: 01.02.2005, 18:28 |
|
Не зарегистрирован
|
А почему не так (в области Org_ID) (легче читать)?
CODE |
SELECT CODE_ID, sum(SUMW), sum(SUMB)
FROM RES
WHERE REC_ID IN
(SELECT REC_ID FROM REC
WHERE (ORG_ID in (1,2,3 ...)) -- или org_id between 1 and 25
AND PER_ID=1
AND YEARS_NUM=2004
AND TYP_ID=2
)
GROUP BY CODE_ID
|
По условию GROUP BY CODE_ID в результирующем запросе не может быть записей больше, чем число различных значений CODE_ID в подзапросе. Если это не так, то у вас глючит сервер, драйвер, компонент. Вы пытались посмтреть какие строки "лишние"?
|
|
telepath |
Отправлено: 01.02.2005, 18:37 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
В области ORG_ID это максимальный запрос, там может быть 1, 2 или 3,7 итд.
А как можно посмотреть? В sql редакторе IB Expert все нормально работает... |
|
AVC |
Отправлено: 01.02.2005, 18:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
В области ORG_ID это максимальный запрос, там может быть 1, 2 или 3,7 итд
|
Это очевидно. Но строка "3,7" смотрится (да и места занимает меньше) чем Org_ID = 3 or Org_ID = 7". Это так, к слову.
По существу.
Лишние строки это те, которые, например. не попадают в выборку (забудем на время об ограничении Org_ID)
Select distinct Code_ID
From Res
Where 1= 1
and PER_ID=1
and YEARS_NUM=2004
andTYP_ID=2
Число строк и значения полей Code_ID должно в точночти совпвлать с
Select Code_ID, Sum(SUMW)
From Res
Where 1= 1
and PER_ID=1
and YEARS_NUM=2004
andTYP_ID=2
Нужно покакзывать как сравнить эти выборки? |
|
telepath |
Отправлено: 01.02.2005, 19:08 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
вот такой дистинкт показывает такое же кол-во записей как select CODE_ID....
CODE | Select distinct Code_ID From Res Where REC_ID IN (
SELECT REC_ID FROM REC WHERE (
ORG_ID=1
OR ORG_ID=2
OR ORG_ID=3
OR ORG_ID=4
OR ORG_ID=5
OR ORG_ID=6
OR ORG_ID=7
OR ORG_ID=8
OR ORG_ID=9
OR ORG_ID=10
OR ORG_ID=11
OR ORG_ID=12
OR ORG_ID=13
OR ORG_ID=14
OR ORG_ID=15
OR ORG_ID=16
OR ORG_ID=18
OR ORG_ID=19
OR ORG_ID=20
OR ORG_ID=21
OR ORG_ID=22
OR ORG_ID=23
OR ORG_ID=24
OR ORG_ID=25
) AND (
PER_ID=1
) AND (
YEARS_NUM=2004
) AND (
TYP_ID=2
)) |
Отредактировано telepath — 01/02/2005, 20:11 |
|
AVC |
Отправлено: 01.02.2005, 19:22 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
вот такой дистинкт показывает такое же кол-во записей как select CODE_ID....
|
Ну слава богу. Значит это не ошибка сервера а просто вы с ним друг друга не поняли.
И все таки, посмотрите какие из строк по вашему мнению лишние, поймите почему.
Не получится — пошлите мне куски этих двух таблиц, достаточные для получения ошибки. Поробую разобраться. |
|
telepath |
Отправлено: 01.02.2005, 19:25 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Хм... с одной ORG_ID работает нормально, показывает правильно... |
|
telepath |
Отправлено: 02.02.2005, 11:43 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Вобщем странно, последний CODE_ID повторяется лишних раз 400. Почему, не пойму |
|