天堂向右,我依然向左

天下之大,虽离家千里,何处不可往!何事不可为!
生活之路,纵坎坷曲折,当奋斗不息,则精彩纷呈!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

如果使用类似下面的SQL语句:

select columnA, columnB from tableA where columnA = 'Condition 1'
union
select columnC, columnD from tableB where columnC = 'Condition 1'
order by columnA asc

 系统会报错:
消息 207,级别 16,状态 1,第 4 行
列名 'columnA' 无效。
消息 104,级别 16,状态 1,第 4 行
如果该语句包含 UNION、INTERSECT 或 EXCEPT 运算符,则 ORDER BY 项必须出现在选择列表中。

问题原因:
既然把多行给union了,把每列叫成什么名字都是不妥当的。。。只要采用列的序号即可。

select columnA, columnB from tableA where columnA = 'Condition 1'
union
select columnC, columnD from tableB where columnC = 'Condition 1'
order by 2 asc

这里需要注意的是,序号从1开始,如果指定的序号不在允许的范围内,系统会报出一个异常

posted on 2012-08-03 17:48  老舟  阅读(6203)  评论(0编辑  收藏  举报