Как написать заявление Sql без использования объединения? - PullRequest
0 голосов
/ 28 июля 2010

У меня есть заявление sql, как показано ниже.Как можно добавить одну строку (code = 0, desc = 1) к результату этого оператора SQL без использования ключевого слова union?спасибо.

select code, desc
from material 
where material.ExpireDate ='2010/07/23'

Ответы [ 3 ]

3 голосов
/ 28 июля 2010

Вы всегда можете создать представление для своей таблицы, которое само использует ключевое слово UNION

CREATE VIEW material_view AS SELECT code, desc, ExpireDate FROM material UNION SELECT '0', '1', NULL;
SELECT code, desc FROM material_view WHERE ExpireDate = '2010/07/23' OR code = '0';
1 голос
/ 28 июля 2010
 WITH material   AS
 (
 SELECT * 
 FROM 
      (VALUES (2, 'x', '2010/07/23'), 
              (3, 'y', '2009/01/01'), 
              (4, 'z', '2010/07/23')) vals (code, [desc], ExpireDate)
 )

SELECT 
     COALESCE(m.code,x.code) AS code, 
     COALESCE(m.[desc],x.[desc]) AS [desc]
FROM material m
FULL OUTER JOIN (SELECT 0 AS code, '1' AS [desc] ) x ON 1=0
WHERE m.code IS NULL OR m.ExpireDate ='2010/07/23'

Придает

code        desc
----------- ----
2           x
4           z
0           1
0 голосов
/ 28 июля 2010

Поскольку вы не хотите использовать ни объединение, ни представление, я бы предложил добавить фиктивную строку в таблицу материалов (с кодом = 0, desc = 1 и ExpireDate, что обычно никогда не выбирается -например, 01 января 1900 г.) - затем используйте запрос, подобный следующему:

select code, desc
from material 
where material.ExpireDate ='2010/07/23' or 
    material.ExpireDate ='1900/01/01' 

Обычно объединение будет моим предпочтительным вариантом.

...