如何用一句sql语句进行跨表查询?

时间:2021-10-10 15:11:39
比如我现在有两个表tb1,tb2.
tb1字段为
id  title  content
tb2的字段为
cID cTitle  cContent

反正这两个表没有一个字段是相同的.

现在我想用一句sql语句来取tb1与tb2的所有数据如何写sql语句?谢谢!

9 个解决方案

#1


select * from tb1
union all
 select * from tb2
注意一下类型 

#2



select id,title,content from tb1
union all
select cid,ctitle,ccontent from tb2

#3


不行.提示'包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。'

应该是两个表的结果都是不一样的原因.

我现在想实现的是两个表结构不一样,然后都可以取完.谢谢.

引用 1 楼 happyflystone 的回复:
select * from tb1
union all
 select * from tb2
注意一下类型

#4


比如说:
tb1:id ,col1,col2
tb2:id,col3,col4,col5,col6

select * from tb2 --
union all
select *,NULL,NULL from tb1 --

#5


引用 3 楼 jasonliangbiz 的回复:
不行.提示'包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。'

应该是两个表的结果都是不一样的原因.

我现在想实现的是两个表结构不一样,然后都可以取完.谢谢.

引用 1 楼 happyflystone 的回复:
select * from tb1
union all
select * from tb2
注意一下类型


这里的*选出你要查找的字段名,注意上下的数据类型要一致,如果字段的数目不同,是不能用union的

#6


类型不一样的数据放在同一列上没什么意义,而且不同类型不可用union

#7


用union all连接,字段最多表放在union all的上面,
union all的下面列出另一个表的对应字段,缺少的字段用null代替

#8


哦。。。呵呵。。学习。。。

#9


当结果集不满足要求时可以用 select * from (select * from ....) 表1,将不符合要求的结果集进行处理后,装载到表1,然后做相应的处理。


 select * from(
select cast(工号 as nvarchar(20)) as 第一列 ,cast(姓名 as nvarchar(20)) as 第二列,cast(性别 as nvarchar(20) )as 第三列 from 人事表
) aa
union all
select * from (
select cast(部门代码 as nvarchar(20))as 第一列,cast(部门名称 as nvarchar(20))as 第二列,cast(记薪标准代码 as nvarchar(20)) as 第三列 from 部门表
) bb



结果:
第一列 第二列 第三列
1000 小张 男
1001 小李 女
1002 小红 女
1003 小明 男
1004 李好 女
1005 黄永 男
1006 张三 男
100 管理部 200
101 资材课 201
102 制造课 202

#1


select * from tb1
union all
 select * from tb2
注意一下类型 

#2



select id,title,content from tb1
union all
select cid,ctitle,ccontent from tb2

#3


不行.提示'包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。'

应该是两个表的结果都是不一样的原因.

我现在想实现的是两个表结构不一样,然后都可以取完.谢谢.

引用 1 楼 happyflystone 的回复:
select * from tb1
union all
 select * from tb2
注意一下类型

#4


比如说:
tb1:id ,col1,col2
tb2:id,col3,col4,col5,col6

select * from tb2 --
union all
select *,NULL,NULL from tb1 --

#5


引用 3 楼 jasonliangbiz 的回复:
不行.提示'包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。'

应该是两个表的结果都是不一样的原因.

我现在想实现的是两个表结构不一样,然后都可以取完.谢谢.

引用 1 楼 happyflystone 的回复:
select * from tb1
union all
select * from tb2
注意一下类型


这里的*选出你要查找的字段名,注意上下的数据类型要一致,如果字段的数目不同,是不能用union的

#6


类型不一样的数据放在同一列上没什么意义,而且不同类型不可用union

#7


用union all连接,字段最多表放在union all的上面,
union all的下面列出另一个表的对应字段,缺少的字段用null代替

#8


哦。。。呵呵。。学习。。。

#9


当结果集不满足要求时可以用 select * from (select * from ....) 表1,将不符合要求的结果集进行处理后,装载到表1,然后做相应的处理。


 select * from(
select cast(工号 as nvarchar(20)) as 第一列 ,cast(姓名 as nvarchar(20)) as 第二列,cast(性别 as nvarchar(20) )as 第三列 from 人事表
) aa
union all
select * from (
select cast(部门代码 as nvarchar(20))as 第一列,cast(部门名称 as nvarchar(20))as 第二列,cast(记薪标准代码 as nvarchar(20)) as 第三列 from 部门表
) bb



结果:
第一列 第二列 第三列
1000 小张 男
1001 小李 女
1002 小红 女
1003 小明 男
1004 李好 女
1005 黄永 男
1006 张三 男
100 管理部 200
101 资材课 201
102 制造课 202