怎样用SQL语句完成此功能?(100分)

  • 主题发起人 主题发起人 iamwind
  • 开始时间 开始时间
I

iamwind

Unregistered / Unconfirmed
GUEST, unregistred user!
有四个Table如下:

Table1:人员情况
BH │ NAME │ .....
───┼───┼────
0001 │ 张三 │ .....
0002 │ 李四 │ .....
0003 │ 王五 │ .....

Table2:职务情况
BH │ ZW │ .....
───┼────┼────
0001 │ 经理 │ .....
0002 │ 副经理 │ .....

Table3:奖励情况
BH │ FS │ .....
───┼───┼────
0002 │ 奖金 │ .....
0003 │ 奖金 │ .....

Table4:考勤情况
BH │ LX │ .....
───┼───┼────
0001 │ 事假 │ .....
0003 │ 病假 │ .....

现要用SQL语句从以上四个表中得到下表:
BH │ NAME │ ZW │ FS │ LX
───┼───┼────┼───┼────
0001 │ 张三 │ 经理 │ │ 事假
0002 │ 李四 │ 副经理 │ 奖金 │
0003 │ 王五 │ │ 奖金 │ 病假

能不能在一个TQuery对象中用SQL语句完成?该怎样写?
 
SELECT T1.BH, T1.NAME, T2.ZW, T3.FS, T4.LX
FROM Table1 T1, Table2 T2, Table3 T3, Table4 T4
WHERE (T1.BH *= T2.BH)
AND (T1.BH *= T3.BH)
AND (T1.BH *= T4.BH)

 
slicker:这样是不对的,如果张三在Table3里没有记录,则你选出的
结果中也不会有张三的记录
 
最好是在数据库中建视图。这样便于移植。不同的数据库语法不同。你用什么数据库?
 
slicker的SQL已经用了out join,关键是提问者的数据库是否支持out join.
不支持的话用视图也不行.
 
Hunj:我在SQL Server中就是这样用的,结果完全正确!
 
select t1.bh,t1.name,t2.zw,t3.fs,t4.lx from table1 t1 left outer join table2 t2
on t1.bh=t2.bh join table3 t3 on t1.bh=t3.bh join table4 t4 where t1.bh=t4.bh
 
一句sql解决问题我认为比较困难
生成一张临时表做,比较简单清楚
 
slicker的方法可行
 
上面写错了,这种方法应该行:
select t1.bh,t1.name,t2.zw,t3.fs,t4.lx from table1 t1 left outer join table2 t2
on t1.bh=t2.bh join table3 t3 on t1.bh=t3.bh join table4 t4 on t1.bh=t4.bh
 
用外连接(OUT JOIN)就可以了,但是关键在于你的数据库是否支持外连接。
而且不同的数据库,外连接的表示不同,如在ORACLE中,SQL语句应该是这样的:
SELECT T1.BH, T1.NAME, T2.ZW, T3.FS, T4.LX
FROM Table1 T1, Table2 T2, Table3 T3, Table4 T4
WHERE T1.BH = T2.BH(+)
AND T1.BH = T3.BH(+)
AND T1.BH = T4.BH(+)
 
多人接受答案了。
 
后退
顶部