一个通不过sql语句!

carlton 2003-02-25 04:30:37
----------------
Select *
From
(select * from 2002)Union all(Select * from 2003)
-----------
或写成:
-------------
Select *
From
(select * from 2002)Union all(Select * from 2003) as temp (dd,tt)

说是错误的from语句。
----------
若写成:
Select *
From
((select * from 2002)Union all(Select * from 2003) as temp (dd,tt))
则为join错误
------------

请问表达这个意思的sql语句该怎么写?
...全文
38 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmvigour 2003-02-26
  • 打赏
  • 举报
回复
先说说你要的结果是什么 为什么一定要变成你要的那个as temp(dd,tt)
而且这并不是标准的sql
如果你要建立一个虚表
可以改成
create view temp(dd,tt)
as
select dd,tt from 2002 union all
select dd,tt from 2003

或者是
select* from (
select dd,tt from 2002 union all
select dd,tt from 2003 ) temp

tangshancheng 2003-02-25
  • 打赏
  • 举报
回复
为什么要加 as temp(dd,tt)

本来语句
select dd,tt from 2002
union all
select dd,tt from 2003
就会返回记录集,其字段以第一个select语句为准,
返回的记录集肯定有两个字段:dd、tt


UNION 运算符使用准则
使用 UNION 运算符时请遵循以下准则:
· 在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。
· 在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
· 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。
示例如下:
table3 table4
a b -c a b
int char(4) char(4) char(4) float
--- ------- ------- ------- -------
1 abc jkl jkl 1.000
2 def mno mno 5.000
3 ghi pqr

执行以下查询:
SELECT a, b FROM table3
UNION
SELECT b, a FROM table4
下面是结果集:
a b
-------- -----
1.000000 abc
2.000000 def
3.000000 ghi
1.000000 jkl
5.000000 mno
在 UNION 操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。在前面的示例中,int 值转换成 float 值,因为 float 类型的优先权比 int 类型高。有关更多信息,请参见数据类型的优先顺序。
以下查询将产生错误信息,因为相应列的数据类型不兼容:
SELECT b, c FROM table3
UNION
SELECT a, b FROM table4
· 通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列:
· SELECT city AS Cities FROM stores_west
· UNION
· SELECT city FROM stores_east
· ORDER BY city
carlton 2003-02-25
  • 打赏
  • 举报
回复
不加括号为“from 字句错误”
加括号则为“联合查询错误”
--上回复中加括号应为:
(select dd,tt from 2002 union all
select dd,tt from 2003)
as temp(dd,tt)
少打了个括号
carlton 2003-02-25
  • 打赏
  • 举报
回复
谢谢各位的回答!
from字句中的
select dd,tt from 2002 union all
select dd,tt from 2003
是可以通过的,但若加上一部分:as temp(dd,tt),为:
select dd,tt from 2002 union all
select dd,tt from 2003
as temp(dd,tt)
或加括号
(select dd,tt from 2002 union all
select dd,tt from 2003
as temp(dd,tt)
则都有错误

正在想办法。
谢谢各位!

redkey 2003-02-25
  • 打赏
  • 举报
回复
select * from 2002
Union all
Select * from 2003
这样写就可以
xmvigour 2003-02-25
  • 打赏
  • 举报
回复
试试
select dd,tt from 2002 union all
select dd,tt from 2003
如果还出错 就说明你的数据库不支持union all
不一定每个数据库都实现标准的sql-92
tangshancheng 2003-02-25
  • 打赏
  • 举报
回复
UNION 运算符使用准则
使用 UNION 运算符时请遵循以下准则:
· 在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。
· 在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
· 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。
示例如下:
table3 table4
a b -c a b
int char(4) char(4) char(4) float
--- ------- ------- ------- -------
1 abc jkl jkl 1.000
2 def mno mno 5.000
3 ghi pqr

执行以下查询:
SELECT a, b FROM table3
UNION
SELECT b, a FROM table4
下面是结果集:
a b
-------- -----
1.000000 abc
2.000000 def
3.000000 ghi
1.000000 jkl
5.000000 mno
在 UNION 操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。在前面的示例中,int 值转换成 float 值,因为 float 类型的优先权比 int 类型高。有关更多信息,请参见数据类型的优先顺序。
以下查询将产生错误信息,因为相应列的数据类型不兼容:
SELECT b, c FROM table3
UNION
SELECT a, b FROM table4
· 通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列:
· SELECT city AS Cities FROM stores_west
· UNION
· SELECT city FROM stores_east
· ORDER BY city

carlton 2003-02-25
  • 打赏
  • 举报
回复
Union all是sql-92中的标准语法。
以上只是一个举例的说法。
可以如下描述:如何使union all生成的数据集再利用。我已经搜索到几篇,但都通不过。
如把上句写全:
select dd,tt
from
(select dd,tt from 2002 union all
select dd,tt from 2003 )
as temp (dd,tt)
即使如此,还是通不过。
请各位赐教!
xmvigour 2003-02-25
  • 打赏
  • 举报
回复
Select *
From
(select * from 2002)Union all(Select * from 2003)
-----------
或写成:
-------------
Select *
From
(select * from 2002)Union all(Select * from 2003) as temp (dd,tt)

-----------------------------------
其实你的结果只要即可 记得2002和2003地表结构要一样
select * from 2002
Union all
Select * from 2003

如果要排序
可以
select * from
(select * from 2002
Union all
Select * from 2003)
order by 1
jcq 2003-02-25
  • 打赏
  • 举报
回复
你用的什么数据库呢
jcq 2003-02-25
  • 打赏
  • 举报
回复
union all 这个是什么数据库的语法。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧