sql多表连接问题

问题描述

一共有三张表1请假表tblleave中有字段leaveidemployeeidapproverid2员工表tblemployee中有字段employeeidloginnamedeptid3部门表departmentid和name如何显示员工名审批者名部门名

解决方案

解决方案二:
用视图
解决方案三:
selectname,loginname,员工名fromtblleaveleftouterjointblemployeeontblleave.employeeid=tblemployee.employeeidleftouterjoin部门表ontblemployee.deptid=部门表.departmentid
解决方案四:
select员工表_A.员工名as请假人,请假表_A.审批者ID,员工表_B.员工名as审批人,部门表.部门名from员工表as员工表_A,员工表as员工表_B,请假表,部门表where员工表_A.部门ID=部门表.部门IDand审批表.审批人ID=员工表_B.员工IDand请假表.雇员id=员工表_A.员工ID没按照你的字段写重点就是对员工表其别名(实际上就有2个员工表了)
解决方案五:
selectloginname,name,approveridfromtblleave,tblemployee,departmentwheretblleave.employeeid=tblemployee.employeeidandtblemployee.deptid=department.departmentid
解决方案六:
引用3楼yulitian的回复:

select员工表_A.员工名as请假人,请假表_A.审批者ID,员工表_B.员工名as审批人,部门表.部门名from员工表as员工表_A,员工表as员工表_B,请假表,部门表where员工表_A.部门ID=部门表.部门IDand审批表.审批人ID=员工表_B.员工IDand请假表.雇员id=员工表_A.员工ID没按照你的字段写重点就是对员工表其别名(实际上就有2个员工表了)

正解
解决方案七:
审批者可以是空值,但是用上面的方法解出来没有空值的那种情况,用外连接,有很多重复的记录,但是不知道哪里错了。而且很麻烦
解决方案八:
那就改用jion写以上代码2个内连接不变"审批表.审批人ID=员工表_B.员工ID"那个,改成左联接即可
解决方案九:
大意如下SELECT员工_2.姓名AS请假人,员工_1.姓名AS审批人,部门.部门名称FROM部门INNERJOIN员工AS员工_2ON部门.部门ID=员工_2.部门IDINNERJOIN请假ON员工_2.员工ID=请假.请假人RIGHTOUTERJOIN员工AS员工_1ON请假.批准人=员工_1.员工ID

时间: 2024-09-23 14:12:41

sql多表连接问题的相关文章

SQL的表连接

每天给自己扫盲,让自己变得越博学. 继续学习<程序员的SQL金典>,这回我们来看看表连接相关的内容.表连接的相关知识在实际的项目开发当中,使用非常广. 所谓表连接,就是通过关联多张表,从而检索出需要的数据.实际的项目,存在多张表的关联关系.不可能在一张表里面就能检索出所有数据.如果没有表连接的话,那么我们就需要非常多的操作.比如需要从A表找出限制性的条件来从B表中检索数据.不但需要分多表来操作,而且效率也不高.比如书中的例子: SELECT FId FROM T_Customer WHERE

【SQL】表连接七种方式

---交叉连接,即是笛卡儿乘积 是一种将一个表的所有数据与另一个表中的所有的数据进行组合的操作.SQL> select e.ename,d.dname   2  from emp e,dept d; Execution Plan ---------------------------------------------------------- Plan hash value: 3429684969 ------------------------------------------------

sql表连接查询使用方法(sql多表连接查询)_MsSql

实际的项目,存在多张表的关联关系.不可能在一张表里面就能检索出所有数据.如果没有表连接的话,那么我们就需要非常多的操作.比如需要从A表找出限制性的条件来从B表中检索数据.不但需要分多表来操作,而且效率也不高.比如书中的例子: 复制代码 代码如下: SELECT FIdFROM T_CustomerWHERE FName='MIKE' 这个SQL语句返回2,也就是姓名为MIKE 的客户的FId值为2,这样就可以到T_Order中检索FCustomerId等于2 的记录: 复制代码 代码如下: SE

sql表连接查询使用方法(sql多表连接查询)

实际的项目,存在多张表的关联关系.不可能在一张表里面就能检索出所有数据.如果没有表连接的话,那么我们就需要非常多的操作.比如需要从A表找出限制性的条件来从B表中检索数据.不但需要分多表来操作,而且效率也不高.比如书中的例子:复制代码 代码如下:SELECT FIdFROM T_CustomerWHERE FName='MIKE' 这个SQL语句返回2,也就是姓名为MIKE 的客户的FId值为2,这样就可以到T_Order中检索FCustomerId等于2 的记录: 复制代码 代码如下:SELEC

【SQL】表连接 --半连接

半连接: 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录.与条件连接相反,即使在右节点中找到几条匹配的记录,左节点的表也只会返回一条记录.另外,右节点的表一条记录也不会返回.半连接通常使用IN  或 EXISTS 作为连接条件.下面是一个例子: SQL> set linesize 999 SQL>  select d.deptno,d.dname,d.loc   2  from scott.dept d   3  where d.deptno IN  (

SQL多表连接查询实例分析(详细图文)_MsSql

新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.) 一.外连接外连接可分为:左连接.右连接.完全外连接. 1.左连接  left join 或 left outer join SQL语句:select * from student left join course on student.ID=course.ID执行结果: 左外连接包含left joi

SQL 多表连接查询实现语句_MsSql

1.理论 只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来. 个人理解:以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为牵引合并起来. 语法 select * FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2 INNER JOIN 操作包含以下部分: 部分 说明 table1, table2 要组合其中的记录的表的名称. field1,field2 要联接的字

sql 多表连接查询_MsSql

新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.) 一.外连接外连接可分为:左连接.右连接.完全外连接. 1.左连接  left join 或 left outer join SQL语句:select * from student left join course on student.ID=course.ID执行结果: 左外连接包含left joi

SQL多表连接查询实例分析(详细图文)

新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.) 一.外连接 外连接可分为:左连接.右连接.完全外连接. 1.左连接  left join 或 left outer join SQL语句:select * from student left join course on student.ID=course.ID 执行结果: 左外连接包含left j

SQL 多表连接查询实现语句

1.理论 只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来. 个人理解:以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为牵引合并起来. 语法 select * FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2 INNER JOIN 操作包含以下部分: 部分 说明 table1, table2 要组合其中的记录的表的名称. field1,field2 要联接的字