基于父表-父子关系中的列的SQL查询

基于父表-父子关系中的列的SQL查询,sql,oracle,Sql,Oracle,我有以下三个表(ACCOUNTS、CUSTOMER、EMPLOYEE),我想根据列AGENT\u CODE和AGENT\u TYPE加入它们,并实现以下目标 当客户和员工表中的代理代码可以相同时,连接这些表的最佳方式应该是什么 我有一个查询,它给了我错误的结果 SELECT ac.AGENT_CODE, ac.WORKING_AREA, ac.AGENT_TYPE, CONCAT(c.FIRST_NAME,c.LASTNAME_NAME), e.EMP_NAME FROM ACCOUN

我有以下三个表(ACCOUNTS、CUSTOMER、EMPLOYEE),我想根据列AGENT\u CODE和AGENT\u TYPE加入它们,并实现以下目标

当客户和员工表中的代理代码可以相同时,连接这些表的最佳方式应该是什么

我有一个查询,它给了我错误的结果

 SELECT ac.AGENT_CODE,
 ac.WORKING_AREA,
 ac.AGENT_TYPE,
 CONCAT(c.FIRST_NAME,c.LASTNAME_NAME),
 e.EMP_NAME
FROM ACCOUNTS ac,
CUSTOMER c,
EMPLOYEE e 
WHERE ac.AGENT_CODE = e.AGENT_CODE 
OR ac.AGENT_CODE = c.AGENT_CODE
使用上面的查询获取错误的结果

+------------+--------------------+------------+--------------+--------------+
| AGENT_CODE | WORKING_AREA       | AGENT_TYPE | CUSTOMER_NAME| EMP_NAME     |
+------------+--------------------+------------+--------------+--------------+
| A007       | Bangalore          |   CUSTOMER |Walter Holmes |Walter Holmes | 
| A007       | London             |   EMPLOYEE |Walter Holmes |Peter Sam     |
| A008       | New York           |   CUSTOMER |Micheal Junior|Micheal Junior| 
| A007       | Bangalore          |   EMPLOYEE |Walter Holmes |John Tyler    | 
| A010       | Chennai            |   CUSTOMER |Micheal       |Micheal       | 
| A007       | San Jose           |   EMPLOYEE |Walter Holmes |Albert        | 
+------------+--------------------+------------+--------------+--------------+ 
预期结果

+------------+--------------------+------------+--------------+
| AGENT_CODE | WORKING_AREA       | AGENT_TYPE | AGENT_NAME   |
+------------+--------------------+------------+--------------+
| A007       | Bangalore          |   CUSTOMER |Walter Holmes | 
| A003       | London             |   EMPLOYEE |Peter Sam     |
| A008       | New York           |   CUSTOMER |Micheal Junior| 
| A011       | Bangalore          |   EMPLOYEE |John Tyler    | 
| A010       | Chennai            |   CUSTOMER |Micheal       | 
| A012       | San Jose           |   EMPLOYEE |Albert        | 
+------------+--------------------+------------+--------------+   
账户(代理代码-主密钥)

+------------+--------------------+------------+
| AGENT_CODE | WORKING_AREA       | AGENT_TYPE |
+------------+--------------------+------------+
| A007       | Bangalore          |   CUSTOMER |
| A003       | London             |   EMPLOYEE |
| A008       | New York           |   CUSTOMER |
| A011       | Bangalore          |   EMPLOYEE |
| A010       | Chennai            |   CUSTOMER |
| A012       | San Jose           |   EMPLOYEE |
| A005       | Brisban            |   EMPLOYEE |
+------------+--------------------+------------+
客户(代理代码-外键)

员工(代理代码-外键)


如果要合并结果,您可能需要
UNION
合并结果

SELECT a.AGENT_CODE, a.WORKING_AREA, a.AGENT_TYPE, c.FIRST_NAME || ' ' || c.LAST_NAME AS AGENT_NAME
FROM ACCOUNTS a
JOIN CUSTOMER c ON c.AGENT_CODE = a.AGENT_CODE
UNION
SELECT a.AGENT_CODE, a.WORKING_AREA, a.AGENT_TYPE, e.EMP_NAME
FROM ACCOUNTS a
JOIN CUSTOMER e ON e.AGENT_CODE = a.AGENT_CODE

@Eric-添加了我当前的查询请添加当前(不正确)的结果too@MarshallTigerus-增加
EMP_NAME    EMP_CODE       AGENT_CODE 
----------  --------------- ----------
Peter Sam    C00054          A003
John Tyler   C00023          A011
White Bolt   C00043          A012
SELECT a.AGENT_CODE, a.WORKING_AREA, a.AGENT_TYPE, c.FIRST_NAME || ' ' || c.LAST_NAME AS AGENT_NAME
FROM ACCOUNTS a
JOIN CUSTOMER c ON c.AGENT_CODE = a.AGENT_CODE
UNION
SELECT a.AGENT_CODE, a.WORKING_AREA, a.AGENT_TYPE, e.EMP_NAME
FROM ACCOUNTS a
JOIN CUSTOMER e ON e.AGENT_CODE = a.AGENT_CODE