如何在不使用union的情况下编写Sql语句?
我有一个像下面的sql语句。如何在不使用union关键字的情况下将单个行(代码= 0,desc = 1)添加到此sql语句的结果中?谢谢。如何在不使用union的情况下编写Sql语句?
select code, desc
from material
where material.ExpireDate ='2010/07/23'
您可以随时为您的表,它本身使用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';
既然你不想使用一个工会或图的图,我建议增加一个虚拟行到材料表(与码= 0,DESC = 1,和EXPIREDATE一些会从不通常被选择 - 例如01 1900年1月) - 然后使用查询类似如下:
select code, desc
from material
where material.ExpireDate ='2010/07/23' or
material.ExpireDate ='1900/01/01'
通常,一个联盟将是米y首选选项。
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'
为什么不使用`UNION`给人
code desc
----------- ----
2 x
4 z
0 1
你可以用行构造函数替换'UNION ALL',例如'(VALUES(2,'x','2010/07/23'),(3,'y','2010/07/23'),(4,'z','2010/07/23 '))AS材料(代码,[desc],ExpireDate)...' – onedaywhen 2010-07-28 16:28:37
@onedaywhen - 是的,我已经做到了。好建议谢谢! – 2010-07-28 16:48:01
?面试吗? – pascal 2010-07-28 08:11:50
UNION有时候被DB提供者严重对待,例如Delphi中的TClientDataSet + TDataSetProvider – too 2010-07-28 08:16:42
存储过程如何返回结果集?或者在调用者代码中添加这个伪行?顺便说一句,使用'DESC'作为列名,你没有问题,因为它已经是SQL关键字了吗? – pascal 2010-07-28 08:22:29