在一个表中,可以使用经理ID和出纳员ID,在另一个表中可以使用出纳员ID,经理ID

时间:2015-04-07 19:32:12

标签: sql oracle

在表1中,经理ID和出纳员ID可用,在另一个表2中,出纳员ID和经理ID在一列中可用,并且其名称在另一列中。

如何在一个查询中单独获取名称和ID?

Table 1 
----------------
Column1 : Manager ID
Column2 : Cashier ID 

Table 2
-----------------

Column1 : Employee ID (it contains both manager and cashier ID)
Column2 : Employee Names (it contains both manager and cashier Name)

预期结果:

Column1: Manager ID
Column2: Manager Name
Column3: Cashier ID
Column4: Cashier Name

我如何得到这个结果?

2 个答案:

答案 0 :(得分:0)

对于ID,如果它们是固定长度,您可以使用Substr函数 - http://www.techonthenet.com/oracle/functions/instr.php

对于名称,如果它们以逗号或分号等分隔,则可以使用Instr函数 - http://www.techonthenet.com/oracle/functions/instr.php

答案 1 :(得分:0)

如果我理解您的问题,那么两位经理(由manager_id中的TABLE1标识)和收银员(cashier_idTABLE1标识)都是员工< / em>(由employee_id中的TABLE2标识) - 也就是说employee_ID的一个值包含manager_IDcashier_ID的值的情况并非如此SELECT t1.manager_id, t2a.employee_name AS manager_name , t1.cashier_id, t2b.employee_name AS cashier_name FROM table1 t1 INNER JOIN table2 t2a ON t1.manager_id = t2a.employee_id INNER JOIN table2 t2b ON t1.cashier_id = t2b.employee_id; 。考虑到这一假设,您应该能够执行以下操作:

TABLE2

请注意,我上面所做的是加入LEFT JOIN 两次但使用不同的别名。现在,如果有员工是收银员但谁没有经理,那么您将要使用INNER JOIN代替第一个LEFT JOIN。如果您有想要退回的经理,但没有收银员工作的收银员,那么您希望使用INNER JOIN代替 second { {1}}。