SQL 语句查询(三表查询)

zpy369 2010-06-01 01:10:12
各位高手:

大家好!现在有个问题想请大家帮忙解决。
现在共有三个表A,B,C,其中A,B两表字段和类型相同,A表和B表合起来后,身份证唯一(姓名可能会重名),C表含有A表和B表部分身份证号码。
A表 id 姓名 身份证号码 出生日期
B表 id 姓名 身份证号码 出生日期
C表 id 身份证号码

问题:用 union all 将A表和B表连接后,通过查询姓名,显示出C表中匹配的数据,请问该怎么写?
...全文
209 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpy369 2010-06-01
  • 打赏
  • 举报
回复
谢谢各位!问题解决了。
--小F-- 2010-06-01
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-06-01 21:22:40
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([id] int,[姓名] varchar(2),[身份证号码] bigint,[出生日期] datetime)
insert [a]
select 1,'aa',610411195011220556,'1950-11-22' union all
select 2,'aa',610411195010220557,'1950-10-22' union all
select 3,'bb',610411195011230558,'1950-11-23'
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([id] int,[姓名] varchar(2),[身份证号码] bigint,[出生日期] datetime)
insert [b]
select 1,'aa',610411196011220559,'1960-11-22' union all
select 2,'bb',610411194010220555,'1940-10-22' union all
select 3,'bb',610411197011230552,'1970-11-23'
--> 测试数据:[c]
if object_id('[c]') is not null drop table [c]
go
create table [c]([id] int,[身份证号码] bigint)
insert [c]
select 1,610411196011220559 union all
select 2,610411194010220555 union all
select 3,610411197011230552
--------------开始查询--------------------------
select
姓名,t.身份证号码,出生日期
from
(
select * from a
union all
select * from b
)t
join c on
t.身份证号码=c.身份证号码
where
t.姓名='bb'
----------------结果----------------------------
/* 姓名 身份证号码 出生日期
---- -------------------- -----------------------
bb 610411194010220555 1940-10-22 00:00:00.000
bb 610411197011230552 1970-11-23 00:00:00.000

(2 行受影响)
*/
gaojie001 2010-06-01
  • 打赏
  • 举报
回复

select 姓名,身份证号,出生日期
(select * from a
union all
select * from b) tmp
inner join c on tmp.身份证号=c.身份证号
where tmp.姓名=bb
gaojie001 2010-06-01
  • 打赏
  • 举报
回复

select 姓名,身份证号,出生日期
(select * from a
union all
select * from b) tmp
inner join c on tmp.身份证号=c.身份证号
where tmp.姓名=bb
--小F-- 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zpy369 的回复:]
各位高手,补充一下,我是想通过在A表和B表中查询姓名,得到在C表中的匹配数据
如:a表数据如下
id 姓名 身份证号码 出生日期
1 aa 610411195011220556 1950-11-22
2 aa 610411195010220557 1950-10-22
3 bb 610411195011230558 1950-11-23

b表数据如下
id 姓名 身份证号码 ……
[/Quote]

说实话 没看出结果是怎么来的
zpy369 2010-06-01
  • 打赏
  • 举报
回复
各位高手,补充一下,我是想通过在A表和B表中查询姓名,得到在C表中的匹配数据
如:a表数据如下
id 姓名 身份证号码 出生日期
1 aa 610411195011220556 1950-11-22
2 aa 610411195010220557 1950-10-22
3 bb 610411195011230558 1950-11-23

b表数据如下
id 姓名 身份证号码 出生日期
1 aa 610411196011220559 1960-11-22
2 bb 610411194010220555 1940-10-22
3 bb 610411197011230552 1970-11-23

c表数据如下
id 身份证号码
1 610411196011220559
2 610411194010220555
3 610411197011230552

通过联合查询A表和B表中的姓名bb,期望得到查询结果:
bb 610411194010220555 1940-10-22
bb 610411197011230552 1970-11-23
永生天地 2010-06-01
  • 打赏
  • 举报
回复
select * from(
select * from A
union all
select * from B
) t , C where t.身份证号码=c.身份证号码
永生天地 2010-06-01
  • 打赏
  • 举报
回复
没数据,不知道你要什么样的结果

select * from(
select * from A
union all
select * from B
) t , C where t.id=c.id

yibey 2010-06-01
  • 打赏
  • 举报
回复
ni 都说姓名会重复了
,是不是要把同一个姓名的C表的所有记录查出来
GOODlivelife 2010-06-01
  • 打赏
  • 举报
回复
select t.*
from
(select * from a union all select * from b) t
join c on t.身份证号码=c.身份证号码
where t.姓名='XXX'
GOODlivelife 2010-06-01
  • 打赏
  • 举报
回复
select t.*
from
(select * from a union all select * from b) t
join c on t.身份证号码=c.身份证号码
Mr_Nice 2010-06-01
  • 打赏
  • 举报
回复
;with TT
as
(select * from A union all select * from B)

select C.* from TT inner join C on TT.id = C.id where TT.姓名 = '张三'

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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