|
Фильтр поля, которое может быть, а может и не быть при соединении right outer join
|
|||
---|---|---|---|
#18+
Доброе время суток! Столкнулся с непонятной мне ситуацией. Был запрос : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Запрос выбирал платежи и остаток на период из таблиц отчета(остаток на начало периода) и платежи( из таблицы платежей), но у него был недостаток - в случае, если платежей не было, строка с данными отчета не включалась в результирующую выборку. Я переписал его недолго думая: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Т.е, если строка с платежами есть, то ее нужно фильтровать беря платежи только по 2011 году и только "фиктивные", если же она отсутствует(плательщик не платит), то ее нужно включить в результирующую выборку (вариант с is null). Однако, строки без платежей по-прежнему не включались в результирующую выборку. Последовательно уменьшая запрос я увидил, что если убрать строки ( (DateBankOut>='2011-01-01' and DateBankOut<='2011-12-31') or (DateBankOut is null) ) and ( isfiction=0 or isfiction is null ) and то строки без платежей (с данными отчета) начинают попадать в результирующий запрос. Так какое же значение, если не null, будут иметь поля DateBankOut и isfiction в этом случае? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 14:33 |
|
Фильтр поля, которое может быть, а может и не быть при соединении right outer join
|
|||
---|---|---|---|
#18+
Вот это говнокод! :-O Тестовых примеров мы опять наверное не дождемся? Мой бубен порвался уже... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 20:02 |
|
Фильтр поля, которое может быть, а может и не быть при соединении right outer join
|
|||
---|---|---|---|
#18+
dizzy1984... Код: plsql 1. 2.
... Так какое же значение, если не null, будут иметь поля DateBankOut и isfiction в этом случае? Все данные у тебя - просто посмотри. Код: plsql 1.
Например DateBankOut не NULL но не в периоде... Код: plsql 1.
isfiction не NULL но и не 0... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 20:09 |
|
Фильтр поля, которое может быть, а может и не быть при соединении right outer join
|
|||
---|---|---|---|
#18+
Спасибо, конечно, за ответ, krvsa, хотя про говнокод слышать неприятно. Расскажите, что в запросе можно было написать поэлегантнее? На sql я не специализируюсь, книжек не читал, мне запросы нужны только чтобы выгрузить данные. Я посмотрел еще раз свою конкретную строку, действительно просто строки резались из-за того, что платили, но не в 11-м году. А скажите, допустим таблица соединяется через outer join с несуществующей строкой другой таблицы, значение поля другой таблицы будет равно null? Я переписал запрос в рабочем варианте Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Короче, спасибо тебе, друг, что читаешь чей-то говнокод :-), кроме шуток ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 07:25 |
|
Фильтр поля, которое может быть, а может и не быть при соединении right outer join
|
|||
---|---|---|---|
#18+
dizzy1984про говнокод слышать неприятно В этом нет ничего зазорного. Главное делать выводы и не говнокодить дальше... dizzy1984Расскажите, что в запросе можно было написать поэлегантнее? Ну вот например... Код: plsql 1.
Про поля не в первой нормальной форме я уже писал... Не делать так. Это первый шаг к говнокодингу... Код: plsql 1.
По возможности избавляться от таких длинных строк. Любое сложное вычисление можно просто заменить на хранимую процедуру. Код: plsql 1.
Анализ интервала заменять на Код: plsql 1.
Тем паче, что это даже работать должно быстрее... Стараться "уходить" ои таких "длинных" условий отбора... Х/з в чем там была суть... Но наверняка можно как-то это обойти... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 09:24 |
|
Фильтр поля, которое может быть, а может и не быть при соединении right outer join
|
|||
---|---|---|---|
#18+
dizzy1984допустим таблица соединяется через outer join с несуществующей строкой другой таблицы, значение поля другой таблицы будет равно null? Если в результирующую таблицу попадает нечто несуществующее - значения этого NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 09:26 |
|
Фильтр поля, которое может быть, а может и не быть при соединении right outer join
|
|||
---|---|---|---|
#18+
krvsa Код: plsql 1.
По возможности избавляться от таких длинных строк. Любое сложное вычисление можно просто заменить на хранимую процедуру. Решать как брать цифру с плюсом или с минусом можно иначе. Как вариант завести справочник, где кодам счетов (или что там у тебя) будет сопоставлена 1 или -1. Останется просто умножить цифру на сопоставленное значение... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 11:18 |
|
|
start [/forum/topic.php?fid=39&msg=38371182&tid=1557077]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 485ms |
0 / 0 |