请问如何用一条sql语句实现两个表的并集查询?

x_liuman 2000-04-30 06:04:00
这其实是一个折磨了我很久的sybase问题,但sql大同小异,
希望能有大虾解脱我。
问题举例描述如下:
库中有两表 a_message , b_message 先假定两表结构完全
一样,现要对其进行统计满足某条件的所有记录
可用 select * from a_message where ...
union
select * from b_message where ...

统计总记录数
可用 select (select count(*) from a_message) +
(select count(*) from b_message)

可以看出我必须用两条select语句,我也过用 distinct 及
不跟关联条件的两表查询语句
e.g. select distinct .. from a_message ,b_message
等各种组合,但这种方法运行效率很低,(我认为它会先生成一个
笛卡儿集),所以我想知道有没有一种办法可以用一条select 语句实
现两个表的交,并,差运算,
我现在认为select 也是一种运算,它的运算结果是一个集合,
有时集合只有一个值,因而迷惑住了别人,因而才可以有如下语句
select ... union select ...
但表跟集合又是什么关系?select .. from (select ...)
不正确,即表明 select 不能从集合中取数,只可从表中取数,
请问个位大虾是如何
看此问提的 ? 小章 这厢有礼了。

...全文
43161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tommy Chang 2000-05-29
  • 打赏
  • 举报
回复
在db2和oracle都可以支持在数据集上面查询,
db2可以写作
select (select ... ) from ....
oracle可以写做
select a.b ....from (select hello b ... from ...) a ...

stellaxyq 2000-05-27
  • 打赏
  • 举报
回复
即要语句少,又要检索的数据量比较小,好象是不可能的。我认为用两条语句比较好。
gxg8816 2000-05-14
  • 打赏
  • 举报
回复
交集就是两表的join 连接查询
如:SELECT ... FROM a JOIN b ON a.id=b.id
并集可用Union
差集可用空值判断。
如:SELECT ... FROM a LEFT JOIN b ON a.id=b.id WHERE isNull(b.id)=true
qiujoe 2000-05-14
  • 打赏
  • 举报
回复
我试过gxg8816的方法,可是觉得在数据量比较大的时候,效率低了一点,
qiujoe 2000-05-02
  • 打赏
  • 举报
回复
我有一个想法,不知道这样行不行。
1、建一个空表C,表内字段只有需要查询的条件和二个标志字段(分别标志来自A表还是B表);
2、将A表的相关内容插入C表,然后填上相应的标志符A;
3、将B表的相关内容插入C表,然后填上相应的标志符B,对于表的已有的记录只需填上标志符B;
4、我们现在可以根据相应的标志符来求相应的运算。
我是一个数据库新手,也不知说的对不对,请各位多多指教。
江王 2000-05-02
  • 打赏
  • 举报
回复 3
Union是表间集合合并的最佳方法,Union合并后的表成为一个新表,你可在新表进行查询,如:
Select Distinct * from (
Select * from a_message
Union
Select * from b_message )
这样不是很一目了然吗?
From子句后跟的须是数据表,当然这个数据表可以是表名,也可以是子查询产生的临时表。而从一个集合中选择数据的情况并不是一种实用的方式,它完全可以用SQL函数来替代。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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