2012-06-06 134 views
0

我有两个表Profile_Appointments和Profile。多个连接到同一个表

在配置表中的每个记录有Profile_key而且除了其他的配置文件数据Profile_Type_Key - 姓氏,名字等

众议员的有Profile_Type 4,客户有Profile_Type 6

PROFILE TABLE 
Profile_Key Profile_Type_key First_Name  Last_Name 
    1234     4    John   Smith 
    8765     6    Mike   Jones 

的Profile_Appointment表包含两个记录每个任命一个与众议员的 Profile_Key其他与客户的Profile_Key

Appointment_Key  Profile_Key  
    10     1234 
    10     8765     

appointment_key引用约会表。

我需要做一个查询,结果在一个记录每个约会和既有代表和客户从配置表

THE RESULT I WANT 
Appointment_Key Profile_Key Rep Profile_Key Customer 
    10    1234     8765 

这是不工作的查询数据...

select appointment_key, p.profile_key as Rep, p2.profile_key as Customer, p.firs_name,p2.first_name from profile_appointment pa 

    join profile p 
    on p.profile_key = pa.profile_key 

    join profile p2 
    on p2.profile_key = pa.profile_key 

    where p.profile_type_key = '4' or p2.profile_type_key = '6' 

我得到的是:

Appointment_Key  Rep  Customer  Rep  Customer 
    10    1234  1234  John  John 

我想不通,我错过了什么。 谢谢。

+1

你似乎只能选择从Profile预约中每次只有一行,因此您将只有一个Profile_Key加入。 – Ilion

+0

难道你不会完成同样的事情坚持只有一个表具有相同的where子句? –

回答

0

你需要,所以你需要满足两个条件,而不是OR

select pa.appointment_key, p.profile_key as Rep, p2.profile_key as Customer, 
     p.first_name as RepName,p2.first_name as CustomerName 
from profile_appointment pa  
join profile_appointment pa2 on pa.appointment_key = pa2.appointment_key 
join profile p on p.profile_key = pa.profile_key and p.profile_type_key = '4' 
join profile p2 on p2.profile_key = pa2.profile_key and p2.profile_type_key = '6' 
+0

这些选项都不会返回所需的结果。用AND替换OR会得到0结果。使用左连接的第二个查询几乎是正确的,但返回两行,一个带有代表数据,另一个带有客户数据。 – Seth

+0

你是对的,我错过了那个约会有两个记录。编辑。 – HLGEM

1
SELECT a1.appointment_key, a1.profile_key rep, a2.profile_key customer 
    FROM appointment a1 
    INNER JOIN profile p1 ON a1.profile_key = p1.profile_key AND p1.profile_type_key = 4 
    INNER JOIN appointment a2 ON a1.appointment_key = a2.appointment_key 
    INNER JOIN profile p2 ON a2.profile_key = p2.profile_key AND p2.profile_type_key = 6 

编辑:您可能会发现嵌套的选择更具可读性:

SELECT reps.appointment_key, reps.profile_key rep, customers.profile_key customer 
    FROM (
    SELECT appointment.* 
     FROM appointment 
     INNER JOIN profile ON appointment.profile_key = profile.profile_key AND profile_type_key = 4 
) reps 
    INNER JOIN (
    SELECT appointment.* 
     FROM appointment 
     INNER JOIN profile ON appointment.profile_key = profile.profile_key AND profile_type_key = 6 
) customers ON reps.appointment_key = customers.appointment_key