|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Есть 2 таблицы: a и rf, в первой 195251 запись, во второй - 617209. Запрос: Код: plaintext
А этот: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2009, 20:52 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
А где связь таблицы rf с подзапросом? Смысл вообще не улавливаю. Что там должно быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2009, 09:14 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
Берем первую строку и смотрим выполняется ли условие. Т.к. подзапрос каждый раз рассчитывается по новой, а связи подзапроса с запросом никакой нет, то соответственно записи существуют, ибо их там 4922. Условие выполняется. Берет строку 2. Опять выполняет подзапрос и получает 4922 записи. Записи существуют, условие выполнено. Берет строку n. Опять выполняет подзапрос и получает 4922 записи. И опять условие выполнено. И т.д., пока не закончится таблица rf. Т.е. в итоге вы получите всю таблицу rf. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2009, 09:37 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
VadyЕсть 2 таблицы: a и rf, в первой 195251 запись, во второй - 617209. Запрос: Код: plaintext
А этот: Код: plaintext
Потому-что для каждой строки из основного запроса несвязанный позапрос выдает , в данном конкретном случае,хотя бы одну строку,поэтому для каждой строчки основного запроса всегда будем получать true Видимо должно быть так Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2009, 10:09 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Спасибо большое! я уже понял! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2009, 12:18 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Скажите, почему выдает ошибку в запросе: zfcacwth.date, month(zfcacwth.date) as month, year(zfcacwth.date) as year, zfcacwth.fcac_RN, zfcacwth.hourqnt as hour from zANK, zFcAc left join (zfcacwth inner join zHrType on zHrType.HrType_rn = zfcacwth.HrType_rn) on zFcAc.FcAc_RN = zfcacwth.FcAc_RN on zFcAc.FcAc_RN = zfcacwtd.FcAc_RN where zFcAc.Ank_RN = zAnk.Ank_RN and zANK.jobend = {^8888-12-31} and zfcacwth.date between {^2009-01-01} and {^2009-01-31} and exists ( select zfcacwtd.date from zFcAc f left join (zfcacwtd left join zdaytype on zfcacwtd.daytype_rn = zdaytype.daytype_rn) on f.FcAc_RN = zfcacwtd.FcAc_RN where zfcacwtd.date between {^2009-01-01} and {^2009-01-31} and zfcacwtd.fcac_RN =zfcacwth.fcac_RN and zfcacwtd.date = zfcacwth.date having truancy = 0 group by zfcacwtd.date, zdaytype.daytype_rn) and zfcacwth.fcac_RN ='01BH' group by zfcacwth.date, zfcacwth.HrType_rn ; Выдает "Error correlating fields' если в подлапросе exists() есть связка zfcacwtd.fcac_RN =zfcacwth.fcac_RN and zfcacwtd.date = zfcacwth.date Такого вида вещи тоже нельзя писать при подкл. через ОДВС MVFPrD 6.01 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2009, 10:22 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2009, 10:36 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Бр.. посл строчку цитированного прошу не учитывать.Мой косяк при написании сообщения. Без неё та же самая ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2009, 10:52 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Обнаружила, что в подзапросе exists() не обрабатывается join . Если писать обычную связку по полям таблиц в where, то всё срабатывавет: select zfcacwth.date, month(zfcacwth.date) as month, year(zfcacwth.date) as year, zfcacwth.fcac_RN, zfcacwth.hourqnt as hour from zANK, zFcAc left join (zfcacwth inner join zHrType on zHrType.HrType_rn = zfcacwth.HrType_rn) on zFcAc.FcAc_RN = zfcacwth.FcAc_RN where zFcAc.Ank_RN = zAnk.Ank_RN and zANK.jobend = {^8888-12-31} and zfcacwth.date between {^2009-01-01} and {^2009-01-31} and exists ( select zfcacwtd.date from zfcacwtd,zdaytype where zfcacwtd.daytype_rn = zdaytype.daytype_rn and zfcacwtd.date between {^2009-01-01} and {^2009-01-31} and zFcAc.FcAc_RN = zfcacwtd.FcAc_RN and zdaytype.truancy = 0 ) and zfcacwth.fcac_RN ='01BH' group by zfcacwth.date, zfcacwth.HrType_rn ; А так - нет: select zfcacwth.date, month(zfcacwth.date) as month, year(zfcacwth.date) as year, zfcacwth.fcac_RN, zfcacwth.hourqnt as hour from zANK, zFcAc left join (zfcacwth inner join zHrType on zHrType.HrType_rn = zfcacwth.HrType_rn) on zFcAc.FcAc_RN = zfcacwth.FcAc_RN where zFcAc.Ank_RN = zAnk.Ank_RN and zANK.jobend = {^8888-12-31} and zfcacwth.date between {^2009-01-01} and {^2009-01-31} and exists ( select zfcacwtd.date from zfcacwtd left join zdaytype on zfcacwtd.daytype_rn = zdaytype.daytype_rn //!!! where zfcacwtd.daytype_rn = zdaytype.daytype_rn and zfcacwtd.date between {^2009-01-01} and {^2009-01-31} and zFcAc.FcAc_RN = zfcacwtd.FcAc_RN and zdaytype.truancy = 0 ) and zfcacwth.fcac_RN ='01BH' group by zfcacwth.date, zfcacwth.HrType_rn ; Как можно избавиться от left join и переделать подзапрос переделать так, чтоб функционал остался? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2009, 13:41 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
* перестраиваем в удобочитаемый вариант * заменяем названия хрен запомнишь в легкозапоминаемые *zANK - с1 *zFcAc - с2 *zfcacwth - с3 *zHrType - с5 *zfcacwtd - с7 *zdaytype - с8 зачем left join? если у вас все одно в select только таблица с3! в подзапросе: left join с8 on с7.daytype_rn = с8.daytype_rn, зачем писать еще в where с7.daytype_rn = с8.daytype_rn? Это же противоречие. с8.truancy = 0 ? тут же left join если строки в c8 не будет, то значение будет NULL., тода уж либо inner join с8 on с7.daytype_rn = с8.daytype_rn where с8.truancy = 0 или left join с8 on с7.daytype_rn = с8.daytype_rn where с8.truancy = 0 or isnull(с8.daytype_rn) /*с8.daytype_rn взял т.к. это ключевое поле, вдруг truancy может принимать значения NULL*/ *group by с3.date, с3.HrType_rn - а зачем group by ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2009, 15:18 |
|
Про функцию EXISTS()
|
|||
---|---|---|---|
#18+
IMHO это будет правильней Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2009, 16:13 |
|
|
start [/forum/topic.php?fid=41&msg=36222297&tid=1586011]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 140ms |
0 / 0 |