DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: zhangyu123456
今日帖子: 43
在线用户: 18
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 ywqq (ywq) ★☆☆☆☆ -
盒子活跃会员
2018/8/22 15:03:37
标题:
请问SQL如何查询多次调用子表 浏览:417
加入我的收藏
楼主:   员工表          
  +------+--------+
  | id   |  姓名  |
  +------+--------+
  | 1    | 王一   |
  | 2    | 张五   |
  | 3    | 李三   |
  | 4    | 老铁   |
  | 5    | 王总   |
  +------+--------+
  订单表          
  +--------+--------+------+------+------+
  | 订单id | 业务员 | 审核 | 批准 | 金额 |
  +--------+--------+------+------+------+
  | 1      |  2     |   1  |  5   |  20  |
  | 2      |  3     |   1  |  5   |  30  |
  | 3      |  2     |   4  |  1   |  50  |
  +--------+--------+------+------+------+

如何查询如下结果:
  订单表          
  +--------+--------+------+------+------+
  | 订单id | 业务员 | 审核 | 批准 | 金额 |
  +--------+--------+------+------+------+
  | 1      |  张五  | 王一 | 王总 |  20  |
  | 2      |  李三  | 王一 | 王总 |  30  |
  | 3      |  张五  | 老铁 | 王一 |  50  |
  +--------+--------+------+------+------+
----------------------------------------------
-
作者:
男 ywqq (ywq) ★☆☆☆☆ -
盒子活跃会员
2018/8/22 15:07:38
1楼: 要求查询结果如下
此帖子包含附件:
PNG 图像
大小:13.0K
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ▲▲▲▲▲ -
普通会员
2018/8/22 15:44:33
2楼: SELECT  订单表.订单id, 员工表.姓名 AS 业务员, 员工表_1.姓名 AS 审核, 员工表_2.姓名 AS 批准, 订单表.金额
FROM 订单表 INNER JOIN
          员工表 ON 订单表.业务员 = 员工表.id INNER JOIN
          员工表 AS 员工表_1 ON 订单表.审核 = 员工表_1.id INNER JOIN
          员工表 AS 员工表_2 ON 订单表.批准 = 员工表_2.id
----------------------------------------------
Delphi7爱好者
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2018/8/22 15:50:54
3楼: 用left join比较好吧,万一订单还没有被审核和批准呢?
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ▲▲▲▲▲ -
普通会员
2018/8/22 16:05:21
4楼: 对,以订单表为准。

不过用户表不会找不到用户记录吧。
----------------------------------------------
Delphi7爱好者
作者:
男 ywqq (ywq) ★☆☆☆☆ -
盒子活跃会员
2018/8/22 16:08:01
4楼: as 还可以这样用,非常感谢!
改用 left join 较好。
----------------------------------------------
-
作者:
男 qin_chao (qin_chao) ★☆☆☆☆ -
盒子活跃会员
2018/8/23 10:01:56
5楼: 其实用零时表最好,速度快
----------------------------------------------
一切只为更好的活着
作者:
男 zhahongyi (如风) ▲▲▲▲▲ -
普通会员
2018/8/23 10:55:42
6楼: SELECT  订单表.订单id ,
        ( SELECT    姓名
          FROM      员工表
          WHERE     员工表.id = 订单表.订单id
        ) AS 业务员 ,
        ( SELECT    姓名
          FROM      员工表
          WHERE     员工表.id = 订单表.订单id
        ) AS 审核 ,
        ( SELECT    姓名
          FROM      员工表
          WHERE     员工表.id = 订单表.订单id
        ) AS 批准 ,
        订单表.金额
FROM    订单表;
----------------------------------------------
-
作者:
男 zhahongyi (如风) ▲▲▲▲▲ -
普通会员
2018/8/23 14:04:08
7楼: 上面没住意写错了,修改了下
  SELECT  订单表.订单id ,
        ( SELECT    姓名
          FROM      员工表
          WHERE     员工表.id = 订单表.业务员
        ) AS 业务员 ,
        ( SELECT    姓名
          FROM      员工表
          WHERE     员工表.id = 订单表.审核
        ) AS 审核 ,
        ( SELECT    姓名
          FROM      员工表
          WHERE     员工表.id = 订单表.批准
        ) AS 批准 ,
        订单表.金额
FROM    订单表;
----------------------------------------------
-
作者:
男 qiuyan81 (苦恋树) ▲▲▲▲▲ -
普通会员
2018/8/23 17:29:14
8楼: 楼上的你这样真的好吗
----------------------------------------------
作者:
男 zhahongyi (如风) ▲▲▲▲▲ -
普通会员
2018/8/24 22:01:53
9楼: 有什么疑问吗?
----------------------------------------------
-
作者:
男 crystalmoon (黑夜杀手) ★☆☆☆☆ -
盒子活跃会员
2018/8/24 22:46:15
10楼: 7楼的没毛病,Oracle经典写法。服务器自动优化。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行31.25毫秒 RSS