Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.17;
Скачать: CL | DM;

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
McSimm2   (2003-06-25 15:25) [0]

Как можно соптимизировать запрос?
Такая ситуация, мне нужно после where указывать равенство 3 полей из одного и того же запроса:

...
WHERE n_lc IN (SELECT k.n_lc
FROM table1 k, table2.dom d
WHERE (d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")
AND jeu IN (SELECT k.jeu
FROM table1 k, table2.dom d
WHERE (d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")
AND rajon IN (SELECT k.rajon
FROM table1 k, table2.dom d
WHERE (d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")

Как нибудь можно это сократить ???


 
kravchuk ©   (2003-06-25 15:34) [1]

попробуй :


FROM ...., table1 k, table2.dom d

WHERE
(d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")
and n_lc=k.n_lc
and jeu =k.jeu
and rajon=k.rajon


 
McSimm2   (2003-06-25 15:41) [2]

Не,- так нельзя, смысл в том,что в селекте у меня идут только вычисляемые поля и если во внешний where вынести условия из вложенных запросов - то основной запрос не пройдёт, т.к. не сможет тогда посчитать сумму...

Select sum(t.sum_field1) as sum1, sum(t.sum_field2) as sum2
from table0 t
WHERE t.n_lc IN (SELECT k.n_lc
FROM table1 k, table2.dom d
WHERE (d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")
AND t.jeu IN (SELECT k.jeu
FROM table1 k, table2.dom d
WHERE (d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")
AND t.rajon IN (SELECT k.rajon
FROM table1 k, table2.dom d
WHERE (d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")


 
roottim   (2003-06-25 15:43) [3]

ну вообще такой запрос должен отработать
WHERE (n_lc, jeu, rajon)
IN (SELECT k.n_lc, k.jeu, k.rajon
FROM table1 k, table2.dom d
WHERE (d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%")


 
Sandman25 ©   (2003-06-25 15:44) [4]

Еще можно попробовать EXISTS, если есть опасность повторений.


 
McSimm2   (2003-06-25 15:45) [5]

roottim (25.06.03 15:43)

Ага - вот я это и имел в виду - можно ли так делать ??? Мне просто это очень сложно проверить - результат запроса -большие и большие цифры....


 
McSimm2   (2003-06-25 15:45) [6]

Sandman25 © (25.06.03 15:44)

Что значит опасность повторений ?


 
roottim   (2003-06-25 15:47) [7]

МОЖНО!


 
Sandman25 ©   (2003-06-25 15:53) [8]

По варианту kravchuk © (25.06.03 15:34)
если в таблицах tabl1 И table2.dom есть повторяющиеся строки (дубликаты), то связывание произойдет несколько раз (вместо 1). В таком случае лучше использовать
...
FROM T
...
AND EXISTS
(SELECT *
FROM table1 k, table2.dom d
WHERE
d.ulica = k.ulica(+) AND d.dom = k.dom(+))
AND UPPER (k.ulica) LIKE "%XXX%"
and T.n_lc=k.n_lc
and T.jeu =k.jeu
and T.rajon = k.rajon
)

and rajon=k.rajon



 
McSimm2   (2003-06-25 15:56) [9]

roottim (25.06.03 15:47)

Отлично работает !!!


 
Sandman25 ©   (2003-06-25 15:58) [10]

Нижняя строка "and rajon=k.rajon"
по ошибке редактирования прошла.


 
McSimm2   (2003-06-25 16:06) [11]

Sandman25 © (25.06.03 15:58)

а что в данном случае exists делает ?


 
Sandman25 ©   (2003-06-25 16:56) [12]

Проверяет, что в table1 и table2.dom есть соответсвующая инфо. При этом не важно, сколько именно строк удовлетворяют условию связи, и исходные данные будут суммироваться только 1 раз (если удовлетворяют условию связи).



Страницы: 1 вся ветка

Текущий архив: 2003.07.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-55523
mmm
2003-07-04 18:35
2003.07.17
Как сделать в StringGrid один столбец редактируемым , другой-нет


1-55498
Alexey
2003-07-04 09:46
2003.07.17
Отключение звукового сигнала при Showmessage


14-55815
Kiril
2003-07-01 00:53
2003.07.17
Можно попробовать заработать...


14-55777
Schummi
2003-06-28 06:18
2003.07.17
Heroes 3 Во Имя Богов


4-55900
HollowMan
2003-05-13 15:42
2003.07.17
Как осуществить перерисовку и блокировку содержимого экрана?