Помощь в селекте с Union

Док
Дата: 25.05.2012 16:43:20
вывожу результирующие данные, где помимо пациентов из базы указываются и "залетные", которым пока в базе делать нечего

+
SELECT 
    '  ' AS "№/№",
    '   ' AS "Код",
    A.ANKLASTNAME||' '||UPPER(LEFT(A.ANKFIRSTNAME,1))||'.'||UPPER(LEFT(A.ANKTHIRDNAME,1))||'.' AS.И.О.",
    LEFT(A.ANKDATEBORN, 4)||' г.р.' AS "Год рожд.",
    IIF(VB.DSTEXT_STR IS NULL,'лабораторное обследование',TRIM(VB.DSTEXT_STR)) AS "Диагноз",
    IIF(VB.RECOMTEXT_STR IS NULL,'рекомендации даны',TRIM(VB.RECOMTEXT_STR)) AS "Рекомендации",
    IIF(VM.FIRSTVISIT = 1,'400=00 руб.','280=00 руб.') AS "Стоим. услуги",
    '   ' AS "Подпись"
FROM TBL_ANKETA A
   INNER JOIN TBL_VISITMAIN VM ON (A.ID_ANKETA = VM.VIS_LINKANKETA)
   INNER JOIN TBL_VISITBLOB VB ON (VM.ID_VISITMAIN = VB.ID_VISITBLOB)
WHERE
        VM.DATEVISIT = :prmDateVisit
--        AND A.ID_ANKETA <> 3766 

-- залетный перец, пришедший сдать анализ
UNION
SELECT
    '  ' AS "№/№",
    'В 572' AS "Код",
    'Иванов И.И.' AS.И.О.",
    '1980 г.р.' AS "Год рожд.",
    'Обследование' AS "Диагноз",
    'взятие СПЖ' AS "Рекомендации",
    '350=00 руб.' AS "Стоим. услуги",
    '   ' AS "Подпись"
FROM TBL_ANKETA A
   INNER JOIN TBL_VISITMAIN VM ON (A.ID_ANKETA = VM.VIS_LINKANKETA)
   INNER JOIN TBL_VISITBLOB VB ON (VM.ID_VISITMAIN = VB.ID_VISITBLOB)
WHERE
        VM.DATEVISIT = :prmDateVisit

ORDER BY 3


Проблема: если за этот день никто ко мне, кроме этого перца не пришел, то запрос выводит NULL. Если же, скажем, был один с A.ID_ANKETA = 3766 и я его не включил в запрос (раскомментировал строку), то запрос (как и хотелось) указывает только "залетного" товарища.


Можно ли как-то поправить синтаксис, чтобы NULL'ы не выводились при первой ситуации?
=================
Док.

FB 2.1.4 18393, диалект 3, SS(многопольз.), FIB+ 7.1, DXE/IBExpert
Мимопроходящий
Дата: 25.05.2012 16:48:02
Док
Проблема: если за этот день никто ко мне, кроме этого перца не пришел, то запрос выводит NULL.
дык, его ж в базе нет.
нафига ты там таблички месишь то?
дёргай его из RDB$DATABASE
Гаджимурадов Рустам
Дата: 25.05.2012 16:50:01
Док
Можно ли как-то поправить синтаксис, чтобы NULL'ы не выводились при первой ситуации?
1. Напиши на доске 100 раз
Я всегда буду использовать "UNION ALL вместо UNION".
Я всегда буду использовать "UNION ALL вместо UNION".
...
Я всегда буду использовать "UNION ALL вместо UNION".

2. Минимизируй пример до RDB$DATABASE. Можно делать
ставки, что после этого поймешь в чем дело самостоятельно.
3. Что ты хочешь видеть вместо NULL в "проблемном" случае?

P.S. 4.
Select_не_возвращающий_записи
UNION
Select_возвращающий_записи

никогда не выдаст

NULL
+
записи второго Select-а.
Dimitry Sibiryakov
Дата: 25.05.2012 16:50:57

Док
Можно ли как-то поправить синтаксис, чтобы NULL'ы не выводились при первой ситуации?

У тебя во втором запросе только константы. Зачем там во FROM какие-то таблицы, да ещё и с
JOIN и WHERE? Поставь просто RDB$DATABASE.

Posted via ActualForum NNTP Server 1.5

Гаджимурадов Рустам
Дата: 25.05.2012 16:51:33
Мимопроходящий
дык, его ж в базе нет.
нафига ты там таблички месишь то?
дёргай его из RDB$DATABASE
Это капец. Только щас заметил FROM и WHERE второго запроса.

P.S. Иногда Select без From (как в MSSQL) полезен, да. Хоть и ересь.
Таблоид
Дата: 25.05.2012 17:11:46
Гаджимурадов Рустам
P.S. Иногда Select без From (как в MSSQL) полезен, да. Хоть и ересь.
Нет тут никакой ереси. А вот делать каждый раз 5 фетчей при извлечении константы из rdb$database - это как раз и есть... странность, мягко сказать.
Док
Дата: 25.05.2012 17:21:25
Гаджимурадов Рустам
Это капец. Только щас заметил FROM и WHERE второго запроса.

Это от недостатка питания нечтения документации :)

Спасибо, мужики ...
Гаджимурадов Рустам
Дата: 25.05.2012 17:22:46
Таблоид
Нет тут никакой ереси.
Есть. В крайнем случае, я могу сослаться на стандарт. А тебе вообще не на что.

Таблоид
странность, мягко сказать.
Казалось бы, мы это уже обсуждали в достаточно длинном топике.
Гаджимурадов Рустам
Дата: 25.05.2012 17:24:14
Док
Это от недостатка питания нечтения документации :)
Нет, нет, нет, ты пункт 1 таки выполнил. Усвоится.

<тут должна быть известная картинка "I will read FAQ and archives before...">
Док
Дата: 25.05.2012 17:34:04
Гаджимурадов Рустам
Нет, нет, нет, ты пункт 1 таки выполнил. Усвоится.

<тут должна быть известная картинка "I will read FAQ and archives before...">

Да ладно тебе. Я тут на 5-ю работу устроился, мне спать-то некогда ;)