|
|
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Хочется написать запрос кот. содержал-бы описание местонахождения объекта. Варианты: - между Улица1 дом1 копр1 и Улица2 дом2 копр2 - угол Улица1 дом1 копр1 и Улица2 дом2 копр2 - просто Улица1 дом1 копр1 Есть такой вариант: SELECT NEWBUILDLIST.BETW || NEWBUILDLIST.CONER || ' ' || STREETONE.STREETNAME || NEWBUILDLIST.DOM1 || '/' || NEWBUILDLIST.KORP1 || ' и ' || STREETTOW.STREETNAME || NEWBUILDLIST.DOM2 || '/' || NEWBUILDLIST.KORP2 FROM NEWBUILDLIST INNER JOIN CITY ON (NEWBUILDLIST.CITY_ID = CITY.CITY_ID) INNER JOIN DISTRICT ON (NEWBUILDLIST.DISTRICT_ID = DISTRICT.DISTRICT_ID) INNER JOIN MSTATION ON (NEWBUILDLIST.MSTATION_ID = MSTATION.MSTATION_ID) INNER JOIN MSTILE ON (NEWBUILDLIST.MSTILE_ID = MSTILE.MSTILE_ID) INNER JOIN TBUILDING ON (NEWBUILDLIST.TBUILDING_ID = TBUILDING.TBUILDING_ID) INNER JOIN STREET STREETONE ON (NEWBUILDLIST.STREET1 = STREET.STREET_ID) INNER JOIN STREET STREETTOW ON (NEWBUILDLIST.STREET2 = STREET.STREET_ID) Но есть проблема: если хоть одно поле содержит null то тогда всё получается null. А это неинтересно :( Может кто-нить что подскажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2003, 18:39 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Используй UDF, которая будет возвращать отличное от NULL, если значение поля NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 02:21 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
>если хоть одно поле содержит null то тогда всё получается null. В запрос не вникал, но для вывода всех записей нужно использовать: LEFT, RIGHT или FULL JOIN в зависимости от того, что хочешь получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 07:18 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Я просто немного неправильно привёл запрос. Вот более приемлимый вариант :) Код: plaintext 1. 2. 3. 4. 5. 6. Мне кажется что LEFT, RIGHT или FULL JOIN здесь непричём. ситуация такая: street2, dom2, korp2 - могут незаполнятся, или например street2 и dom2 есть, а korp2 нет. И как только одно из этих полей незаполнено - выходит null :( заполнять пробелами тоже не катит хотябы потому, что street - это ссылка на справочник улиц to Posco: А как пишутся эти ф-ции? Можешь дать какой-нить пример или ссылку толковую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 11:40 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Тогда UDF по IB есть хороший сайт http://www.ibase.ru Для FB 1.5 есть встроенная функция не помню точно как называется что-то COALE... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 12:34 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
А как передать в ф-цию Null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 13:23 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Чтобы в выходной набор попадали строки с Null -значениями в полях, используй OUTER JOIN SELECT NEWBUILDLIST.BETW, NEWBUILDLIST.CONER, STREETONE.STREETNAME, NEWBUILDLIST.DOM1, NEWBUILDLIST.KORP1, STREETTOW.STREETNAME, NEWBUILDLIST.DOM2, NEWBUILDLIST.KORP2 FROM NEWBUILDLIST left outer JOIN STREET STREETONE ON (NEWBUILDLIST.STREET1 = STREET.STREET_ID) left outer JOIN STREET STREETTOW ON (NEWBUILDLIST.STREET2 = STREET.STREET_ID) А соединяй это безобразие в одну строку на клиенте, анализируя методом IsNull, например ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 13:55 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
to Малиновский Владимир: Спасибо. А что значит методом "IsNull"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 14:40 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Если использовать FireBird 1.5 - там есть функция проверки на NULL - COALESCE. SELECT COALESCE(FIELD1,'---') FROM TABLE Be Well... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 15:32 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Ну, у потомков TDataSet (я надеюсь, ты какой-нибудь используешь) есть свойство Fields, к которые можно проверить на Null, например так: MyDataSet.FieldByName('STREETNAME').IsNull Можешь использовать UDF, правда, я не знаю, как там дела с Null - значениями параметров обстоят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 15:39 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
А может можно написать ХП которой передать все эти поля (благо там помоему есть проверка на Null) что-бы она возвращала уже собранное поле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 16:21 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Может подскажешь? а то я пол-дня книгу читаю, но никак немогу сообразить. 8( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 18:08 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
На основе твоего запроса получается что-то вроде: Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2003, 18:55 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
А почему эта процудера возвращает только одну строку из таблицы? или подругому никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:06 |
|
||
|
Построить запрос
|
|||
|---|---|---|---|
|
#18+
Если строка в вопросе = запись, то проверь сколько записей возвращает этот селект, используемый в процедуре (собственно твой приемлемый вариант): SELECT NEWBUILDLIST.BETW, NEWBUILDLIST.CONER, STREETONE.STREETNAME, NEWBUILDLIST.DOM1, NEWBUILDLIST.KORP1, STREETTOW.STREETNAME, NEWBUILDLIST.DOM2, NEWBUILDLIST.KORP2 FROM NEWBUILDLIST INNER JOIN STREET STREETONE ON (NEWBUILDLIST.STREET1 = STREET.STREET_ID) INNER JOIN STREET STREETTOW ON (NEWBUILDLIST.STREET2 = STREET.STREET_ID) Если строка в вопросе - это строковый выходной параметр процедуры, то ничего другого ты и не спрашивал (см. свой запрос). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:15 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32262608&tid=1579987]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 468ms |

| 0 / 0 |
