关于三表合并的SQL语句,请教!

路人甲cw 2011-04-10 12:58:33
现有A,B,C三张表,表A储存基本信息,表B储存高血压信息,表C储存糖尿病信息:
---------
表A结构大致如下:

编号 姓名 性别 是否有慢性病

表B结构大致如下:


编号 姓名 性别 高血压相关指标

表C结构大致如下:


编号 姓名 性别 糖尿病相关指标

---------
它们之间的关系是,假如 张三 是糖尿病人,那么在表B中就会有他的一条记录,同理如果他是糖尿病人那么在表C中就也会有一条相关的记录,如果同时是高血压又是糖尿病那么BC两表都有一条相关记录,记录有且只有一条!如果慢性病为否,那么视为健康人群,BC两表中都不会有相关记录,无论是高血压还是糖尿病,慢性病都为是.

问题如下:
我想查出这样的数据:
编号 姓名 性别 是否有慢性病 高血压相关指标 糖尿病相关指标

无论有没有慢性病或无论是高血压还是糖尿病人都显示出相同的列出来,只是有些列可能为空.
但是如果有下面的语句来查就只会查出同时是高血压又是糖尿病的人,其它人就不会被选中:
select a.编号,a.姓名,a.性别,a.是否慢性病,b.高血压相关指标,c.糖尿病相关指标 from 表A a,表B b,表C c where a.编号=b.编号 and a.编号=c.编号

请问应该如果生成SQL?
因为我想把这些数据分三个表来存,如果都存一张表的话就不会有这些问题了,但我不想那样做,不知道这样合理吗?有没有更好的设计方式?
...全文
150 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingmu 2011-04-10
楼主得补充sql的基础了,顶楼上。
回复
路人甲cw 2011-04-10
[Quote=引用 5 楼 yyoinge 的回复:]

SQL code
select a.编号,a.姓名,a.性别,a.是否慢性病,b.高血压相关指标,c.糖尿病相关指标 from 表A a
left join 表B b on a.编号=b.编号
left join 表C c on a.编号=c.编号
[/Quote]
非常感谢,原来还有LEFT JOIN,看来得多加强SQL基础才行啊!
回复
yyoinge 2011-04-10
select a.编号,a.姓名,a.性别,a.是否慢性病,b.高血压相关指标,c.糖尿病相关指标 from 表A a
left join 表B b on a.编号=b.编号
left join 表C c on a.编号=c.编号

回复
路人甲cw 2011-04-10
现在的问题是如何组合查询,比如:
insert into 表A(1,'张三','男','有');
insert into 表B(1,'张三','男','血压指标');
表C中没有对应张三的数据,因为他是高血压病人,但我想查出这样的数据:

编号 姓名 性别 是否有慢性病 高血压相当指标 糖尿病相当指标
1 张三 男 有 高血压指标 无
2 李四 男 无 无 无
3 王五 男 有 高血压指标 糖尿病指标
回复
路人甲cw 2011-04-10
[Quote=引用 1 楼 lamar511 的回复:]

C# code

编号 姓名 性别 是否有慢性病 高血压相关指标 糖尿病相关指标


将表设计成这样。
“是否有慢性病”字段中存储一个标志就行了。
比如:没有慢性病 “N”;高血压 “G”;糖尿病 “T”
后面的两个字段,根据“是否有慢性病”的标志来决定存储数据与否。
[/Quote]
不好意思,我在表中是这样设计的,只是为了让大家能够看明白,所以就用举例的方式表达
回复
LamarChen 2011-04-10

编号 姓名 性别 是否有慢性病 高血压相关指标 糖尿病相关指标

将表设计成这样。
“是否有慢性病”字段中存储一个标志就行了。
比如:没有慢性病 “N”;高血压 “G”;糖尿病 “T”
后面的两个字段,根据“是否有慢性病”的标志来决定存储数据与否。
回复
发动态
发帖子
数据库相关
创建于2007-09-28

732

社区成员

PowerBuilder 数据库相关
申请成为版主
社区公告
暂无公告