|
помогите с запросом
|
|||
---|---|---|---|
#18+
Почему такой запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Работает нормально для любых переменных cschet и uch_per (последняя строка and abonfl_lic.schet=cschet and abonfl_lic.filter_uch=uch_per не нужна всунул для проверки) А нужное полное множество Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Помогите если можно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 11:13 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
rock-n-rollПочему такой запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Работает нормально для любых переменных cschet и uch_per (последняя строка and abonfl_lic.schet=cschet and abonfl_lic.filter_uch=uch_per не нужна всунул для проверки) А нужное полное множество Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Помогите если можно Начните с малого. вот эта строчка Код: plaintext
Вроде как мельком взглянул похоже на соединение,замениете для начала на JOIN-ы- чтобы хотя-бы самому легче понять что как и в какой полседовательности соединяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 11:48 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
rock-n-rollПочему такой запрос Код: plaintext 1. 2. 3. 4. 5.
Применяйте в условиях запроса более простые алиасы, вот у меня лично от вашего кода в глазах рябит,например так хотя-бы Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 11:54 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
а сей Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
В частности интересует вбираемые j1.avar j2.avar нилл или что-то замениете для начала на JOIN-ы- чтобы хотя-бы самому легче понять что как и в какой полседовательности соединяется. пробую -пробую .. все равно пока ничего не выходит ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 13:03 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
rock-n-roll Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
а сей Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
В частности интересует вбираемые j1.avar j2.avar нилл или что-то замениете для начала на JOIN-ы- чтобы хотя-бы самому легче понять что как и в какой полседовательности соединяется. пробую -пробую .. все равно пока ничего не выходит Не вижу замену на джоины. Не есть комильфо смешивать не явное соединение(у вас через were) с явными. Должно получиться типа такого,если не напутал нигде: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
А что собственно хотим получить? В вашем первом случае вы просто выбирает строки где Код: plaintext
Код: plaintext
а во втором случае этого условия нет, а по условию соединения в запросе всегда будут выводится все строки из табл j1,j2 если не отсечь некоторые из них в условии WHERE. В джоинах соединяем,в where-отсекаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 13:27 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
quxix а по условию соединения в запросе всегда будут выводится все строки из табл j1,j2 Тьфу .. все строки из полученных соединений до j1,j2 а не найденные соответствия отобразятся j1.null,j2.null ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 13:31 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
rock-n-roll, Вы хоть понимаете что Вы делаете? Left join будет действовать на на последнюю таблицу в списке. Код: plaintext 1. 2. 3. 4.
А, судя по условию связи, надо джойнить с Код: plaintext 1.
Первый запрос работает только потому, что выполняется условие отбора Код: plaintext 1.
Тогда (1) преобразуется к Код: plaintext 1. 2. 3. 4.
В общем, рисуйте схему как будут связаны ваши таблицы и переделывайте запрос!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 13:31 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
rock-n-roll(...) left join-ы начинают гнать (подсовывать последние значения из своих тейблов безо всяких признаков Помогите если можно Вы делаете распространенную ошибку "переводя" термин "left join", как "присоединить один-к-одному". Т.е. Вы предполагаете, что сначала выбираются записи из "основной" таблицы, а потом к этим, выбранным записям, "присоединяются" записи из "дополнительной" таблицы ничего не меняя в основной выборке. На самом деле, ключевое слово "left" относится только к тем записям, для которых НЕ НАЙДЕНО соответствия в условии объединения ON. Другими словами, все внешние объединения (left, right, full) возвращают все то же самое, что и inner, но в ДОПОЛНЕНИЕ к тому, что вернуло бы inner добавляет еще кое-какие записи... Чтобы было понятно, простой пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Обратите внимание, что в части объединения по коду 1 LEFT JOIN ведет себя точно также, как и INNER JOIN. Т.е. просто берет все возможные пересечения значений и возвращает 4 записи. Отличия от INNER JOIN возникают только в отношении кода 3, для которого нет соответствия в "правой" таблице. Т.е. произошло "присоединение к левой части", даже если нет соответствия в "правой". Другими словами, вероятно, у Вас связь между таблицами много-ко-многим. Но, поскольку записи не упорядочены, то Вам КАЖЕТСЯ, что left join выдает что-то не то. Попробуйте добавть к выборке ORDER BY и посмотрите, нет ли "дублей" ===================================================================== Вместо конструкции IIF(IsNul(), ..., ...) проще использовать функцию NVL(..., ...) т.е. вместо Код: plaintext
можно написать так Код: plaintext
Тогда Ваш исходный запрос будет выглядеть так Код: 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.
===================================================================== Теперь, после того, как запрос приобрел более-менее читабельный вид, пытаемся понять, зачем же Вам понадобился LEFT JOIN? Т.е. пытаемся "перевести" на "человеческий" язык Ваш запрос. Судя по коду, Вам просто надо поставить значение 0, если есть соответствующая запись в таблицах, присоединенных по LEFT. Так может, будет достаточно ИСКЛЮЧИТЬ записи, у которых есть связь? Т.е. вместо LEFT JOIN использовать WHERE NOT EXISTS(...)? Правда, тут надо знать, для чего будет впоследствии использоваться данная выборка. Можно ли именно исключить "нулевые" записи или они тем не менее нужны и именно нулевые? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 17:23 |
|
помогите с запросом
|
|||
---|---|---|---|
#18+
благодарю за критику вроде получилось Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2009, 08:35 |
|
|
start [/forum/topic.php?desktop=1&fid=41&tid=1585783]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 130ms |
0 / 0 |