这是你数据库设计上的毛病,你既然用三张表来保存一个人的资料,
比如表1是基本资料表(姓名、年龄等),表2是职务表(任职时间,职务等),表3是家属资料表(称呼,工作单位等)。这里的一些信息可以没有,但你这三张表应该有一个共同的字段('编号'),而且三张表的字段('编号')的值应该相等,如此做的话,就可以用你的Sql语句将记录取出来.
这种情况下,不要只想怎么写语句,适当考虑一下数据库的问题!
比如表1是基本资料表(姓名、年龄等),表2是职务表(任职时间,职务等),表3是家属资料表(称呼,工作单位等)。这里的一些信息可以没有,但你这三张表应该有一个共同的字段('编号'),而且三张表的字段('编号')的值应该相等,如此做的话,就可以用你的Sql语句将记录取出来.
这种情况下,不要只想怎么写语句,适当考虑一下数据库的问题!
解决方案 »
- 请教大家:关于三层数据库系统开发的学习?
- 关于服务端,自动创建数据集的讨论
- ADO里的ADOTABLE怎么连接EXCEL?
- AdvStringGrid升级的问题?
- 企业内建一个邮件系统,域名为haitian.cn,([email protected])凡是该域名内的邮件都可以发,但不可以发给其他如sohu.com,该怎么办
- 各位高手能告诉我,那里有InstallShield for Delphi6.0 下载呢????
- 为什么在调试退出总报错:"Exception EAccessViolution in module IDODBC32.DLL at 0001030F Acess violution ....?
- 请问安装程序"Wise"的最新版带注册码的版本谁有?请告诉我,谢谢了
- 模拟HTML按钮点击
- 小问题,怎样给工具条加上图标?
- QRRichText 打印如果页数很多(2页以上),就打印不完全,但打印预览中可以看到全部,为什么?
- 谁有Delphi编译错误信息对照表,有中文注解的最好---50分
SELECT A.个人编号,A.姓名,A.年龄,
职务=(SELECT 职务 FROM B WHERE B.个人编号=A.个人编号),
家属称呼=(SELECT 称呼 FROM C WHERE C.个人编号=A.个人编号)
FROM A
select t1.*,t2.*,t3.*
from t1,t2,t3
where t1.个人编号='12345' and t1.个人编号*=t2.个人编号 and t1.个人编号*=t3.个人编号
From A Left Join B on A.个人编号=B.个人编号
Left Join C on A.个人编号=C.个人编号
Where A.个人编号='12345'一切OK,是吧!!!!
与我讲的是同一道理,
只不过是外连接的不同表达方式!
你只要能保证“个人编号”的唯一性就可以放心使用!
关注
比如表1是基本资料表(姓名、年龄等),表2是职务表(任职时间,职务等),表3是家属资料表(称呼,工作单位等)。这里的一些信息可以没有,但你这三张表应该有一个共同的字段('编号'),而且三张表的字段('编号')的值应该相等,如此做的话,就可以用你的Sql语句将记录取出来.
这种情况下,不要只想怎么写语句,适当考虑一下数据库的问题!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-----是每张表都有一个“个人编号”的字段啊。不过就是说表1有12345这个编号的记录,但表2、表3是有可能没有这个记录的,也可能有,而且表3还可能有好几条关于12345这个人的记录(家属当然有好几个了)。
liang_z(千山一刀之忍者神龟)的办法可以一试,当然是用在唯一记录的表中;
计算字段的办法也可以的,不过要是字段多了也麻烦些;
V_Lucky(Lucky) 的我没用过,不过也要去试试,先谢谢各位大虾米了!
明天我来结帖。
给分这么难吗?
用这种方法 SELECT
pName=tab1.Name,--取第一张表的姓名
pHeadShip=(SELECT tab2.HeadShip FROM TABLE2 tab2 WHERE tab2.Name=tabl.Name),
--根据第一张表的姓名,从第二张表取出职务信息,没有这个人,职务为空
--这可以解决uion视图无法查询的问题。
pTitle=(SELECT tab3.Title FROM TABLE3 tab3 WHERE tab3.name=tab1.Name)
--取出称呼。其它部分以此类推。 FROM
TABLE1 tab1解决了吗?
另外我用的是paradox的数据库,不是sqlserver。