Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / 2 курсора соеденить в 1 / 6 сообщений из 6, страница 1 из 1
23.03.2011, 16:21
    #37179535
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 курсора соеденить в 1
написала 6 запросов. но последние 2 хочу сляпать в 1 . у временных таблиц из этих запросов одинаковое кол-во столбцов и имена одинаковые у столбцов.

чтоб прониклись ситуацией, вот все 6:

1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT ;
  ORGBASE_1.RN, ;
  ORGBASE_1.SHOWNAME AS FIO, ;
  substr(ZSUBDIV_1.NAME,len(alltrim(ZSUBDIV_1.number))+ 2 ,len(alltrim(ZSUBDIV_1.name))-len(alltrim(ZSUBDIV_1.number))- 1 ) as podrazdelenie, ;
  ZTIPDOL_1.NAME AS DOLJNOST, ;
  iif(ZFCAC_1.STARTDATE<=date( 2010 , 1 , 1 ),iif(ZFCAC_1.endDATE>=date( 2010 , 12 , 31 ), 12 ,month(ZFCAC_1.endDATE)),iif(ZFCAC_1.endDATE>=date( 2010 , 12 , 31 ), 13 -month(ZFCAC_1.startDATE),month(ZFCAC_1.endDATE)-month(ZFCAC_1.startDATE)+ 1 )) AS Q_M, ;
  ZVIDISP_1.CODE AS VID_LIC, ;
  sum(ZHIS.SUM) as s1 ;
FROM ;
  ZHIS ;
    left join ZFCAC as ZFCAC_1 on (ZHIS.FCAC_RN = ZFCAC_1.FCAC_RN) ;
      left join ZANK as ZANK_1 on (ZFCAC_1.ANK_RN = ZANK_1.ANK_RN) ;
        left join ORGBASE as ORGBASE_1 on (ZANK_1.ORGBASE_RN = ORGBASE_1.RN) ;
      left join ZPOST as ZPOST_1 on (ZFCAC_1.POST_RN = ZPOST_1.POST_RN) ;
        left join ZSUBDIV as ZSUBDIV_1 on (ZPOST_1.SUBDIV_RN = ZSUBDIV_1.SUBDIV_RN) ;
        left join ZTIPDOL as ZTIPDOL_1 on (ZPOST_1.TIPDOL_RN = ZTIPDOL_1.TIPDOL_RN) ;
      left join ZVIDISP as ZVIDISP_1 on (ZFCAC_1.VIDISP_RN = ZVIDISP_1.VIDISP_RN) ;
    left join ZSNU as ZSNU_1 on (ZHIS.SNU_RN = ZSNU_1.SNU_RN) ;
 ;
WHERE (Zsnu_1.catalog_rn = "00Zт") AND  ;
  (Zhis.year =  2010 ) AND  ;
  ((Zsubdiv_1.name = "1")or(Zsubdiv_1.name = "2")) ;
GROUP BY ZVIDISP_1.CODE, ZHIS.ANK_RN ;
ORDER BY ORGBASE_1.SHOWNAME, ZVIDISP_1.CODE ;
INTO CURSOR SrZr01

2:
Код: plaintext
1.
2.
3.
4.
5.
SELECT ;
  SRZR01.* ;
FROM ;
  SRZR01 ;
WHERE !(Srzr01.vid_lic = "Внут") ;
INTO CURSOR SrZr02

3:
Код: plaintext
1.
2.
3.
4.
5.
SELECT ;
  SRZR01.* ;
FROM ;
  SRZR01 ;
WHERE (Srzr01.vid_lic = "Внут") ;
INTO CURSOR SrZr03

4:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT ;
  SRZR03.RN, ;
  SRZR03.FIO, ;
  SRZR02.PODRAZDELENIE, ;
  SRZR02.DOLJNOST, ;
  SRZR02.Q_M, ;
  SRZR03.VID_LIC, ;
  SRZR03.S1 ;
FROM ;
  SRZR03 ;
    left join SRZR02 on (SRZR03.RN=SRZR02.RN) ;
INTO CURSOR SrZr04

5:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT ;
  SRZR02.FIO, ;
  SRZR02.PODRAZDELENIE, ;
  SRZR02.DOLJNOST, ;
  SRZR02.VID_LIC, ;
  SRZR02.S1, ;
  SRZR02.S1/SRZR02.Q_M as s2 ;
FROM ;
  SRZR02 ;
INTO CURSOR SrZr05
6:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT ;
  SRZR04.FIO, ;
  SRZR04.PODRAZDELENIE, ;
  SRZR04.DOLJNOST, ;
  SRZR04.VID_LIC, ;
  SRZR04.S1, ;
  SRZR04.S1/SRZR04.Q_M as s2 ;
FROM ;
  SRZR04 ;
INTO CURSOR SrZr06

Как же соединить их? Это возможно? Подскажите, пожалуйста
...
Рейтинг: 0 / 0
23.03.2011, 16:40
    #37179574
PP762
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 курсора соеденить в 1
Смело используй

авторSELECT ;
SRZR02.FIO, ;
SRZR02.PODRAZDELENIE, ;
SRZR02.DOLJNOST, ;
SRZR02.VID_LIC, ;
SRZR02.S1, ;
SRZR02.S1/SRZR02.Q_M as s2 ;
FROM ;
SRZR02 ;
UNION ALL;
SELECT ;
SRZR04.FIO, ;
SRZR04.PODRAZDELENIE, ;
SRZR04.DOLJNOST, ;
SRZR04.VID_LIC, ;
SRZR04.S1, ;
SRZR04.S1/SRZR04.Q_M as s2 ;
FROM ;
SRZR04 ;
INTO CURSOR crs_tvoe
...
Рейтинг: 0 / 0
23.03.2011, 20:31
    #37179986
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 курсора соеденить в 1
У Вас не вполне правильное понимание того, как взаимодействуют LEFT JOIN и WHERE. В приведенном синтаксисе если условие отбора по таблице находится в директиве WHERE, то использование LEFT - бессмысленно. Поскольку такая комбинация будет работать как INNER JOIN

Другими словами Вам надо либо перенести все условия по таблицам, указанным в LEFT в условия объединения (в опцию ON), либо вместо LEFT JOIN использовать INNER JOIN. А то, что у Вас сейчас просто излишне усложняет и замедляет выполнение запроса. Если, конечно, предположить, что Вас не интересуют те записи таблицы ZHIS, которым нет соответствия в присоединенных по LEFT JOIN таблицах.

сравните

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Create Cursor t1 (f1 i)
Insert into t1 values ( 1 )
Insert into t1 values ( 2 )

Create Cursor t2 (f1 i, f2 i)
Insert into t2 values ( 1 ,  1 )
Insert into t2 values ( 2 ,  2 )

* Это то, что делаете Вы
Select * from t1 left join t2 on t1.f1=t2.f1 where t2.f2 =  2 

* А это то, что в принципе должно бы быть, если Вас интересует именно LEFT JOIN
Select * from t1 left join t2 on t1.f1=t2.f1 and t2.f2 =  2 

* Если же LEFT JOIN не интересует, то проще использовать INNER JOIN
Select * from t1 INNER join t2 on t1.f1=t2.f1 where t2.f2 =  2 
...
Рейтинг: 0 / 0
24.03.2011, 02:29
    #37180277
PP762
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 курсора соеденить в 1
Вот таких "оригиналов" берем - с ) С надждой что допетрят как тупо объеденить 2 таблицы.. ля начала. А Вы ему лекцию.
Он уже должен все знать.
...
Рейтинг: 0 / 0
24.03.2011, 09:34
    #37180414
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 курсора соеденить в 1
to PP762
спасибо, работает
to ВладимирМ
left join прописывает мастер запроса. потому как я его сначала с помощью мастера создаю, и только потом правлю в некоторых местах. Но быстродействие мне бы очень пригодилось. Спасибо за подсказку - теперь первый формируется не 150 а 10 сек.
...
Рейтинг: 0 / 0
28.03.2011, 12:09
    #37185476
2 курсора соеденить в 1
test test
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / 2 курсора соеденить в 1 / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]