sql - 在多个联接中使用同一个表
问题描述
我试图得到这个结果,但不知道如何实现。
Client id Operator Name
---------------------------------
11 John
12 Helen
13 Mark
我有 3 张桌子。
表A
clientid Operatorid
--------------------------------
11 1
12 Null
13 Null
表B
Operatorid Operatorname
---------------------------
1 John
2 Helen
3 Mark
表C
Client id Operatorid Description
---------------------------------------------
12 2 S1
12 2 S23
13 3 S1
我的查询是
SELECT
c.ClientID, c.ClientName, b.operatorname
FROM
Clienttable c
LEFT OUTER JOIN
(SELECT Clientid, OperatorID
FROM tableA) a ON a.ClientId = c.ClientId
LEFT OUTER JOIN
tableB ON b.operatorid = a. operatorid
LEFT OUTER JOIN
(SELECT Clientid, OperatorID
FROM tableC
WHERE Description LIKE S1) tc ON tc.ClientId = c.ClientId
tableB b.operatorid = tc. operatorid
提前致谢
解决方案
首先,从tablea中选择client_id和operator_id,加入tableb得到operator_name(左图)
二、从c表中选择client_id和operator_id,加入tableb得到operator_name(右图)
最后将左和右联合以获得组合结果。(合并左右)
以下查询将执行以下操作:
SELECT
a.client_id,
a.operator_id,
b.operator_name
FROM tablea a
JOIN tableb b
ON a.operator_id = b.operator_id
UNION
SELECT
c.client_id,
c.operator_id,
b.operator_name
FROM tablec c
JOIN tableb b
ON c.operator_id = b.operator_id
参考:INSERT INTO Table from multiple tables用于从多个表中插入。
推荐阅读
- python - 如何在 Django 管理页面中编辑请求的参数?
- php - 无效的货币代码 - 在 woocommerce 的结帐页面上出错
- android - 如何将微调器项目与数据连接起来
- sql-server - VB6 - 如何在一次调用中执行多个 SQL 查询
- haskell - 如何将正确的 Cabal 规范与 Travis CI 构建中的每个解析器匹配?
- windows - 如何在PowerShell中添加异常以等待进程关闭命令?
- javascript - 需要另一个 JS 文件的主文件的 Gulp 简单连接
- .net - 以编程方式访问 Visual Studio 代码样式(颜色等)
- php - 如何将警报功能更改为引导模式
- c++ - 字符到整数数组