基于父表-父子关系中的列的SQL查询
我有以下三个表(ACCOUNTS、CUSTOMER、EMPLOYEE),我想根据列AGENT\u CODE和AGENT\u TYPE加入它们,并实现以下目标 当客户和员工表中的代理代码可以相同时,连接这些表的最佳方式应该是什么 我有一个查询,它给了我错误的结果基于父表-父子关系中的列的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
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