SQL Join语法包含三个带左连接的表

时间:2016-06-06 17:51:02

标签: sql join

我有三个表T1,T2,T3的关系是: T2上的T1一对多(字段T2.ID1 - > T1.ID) T2上的T3一对多(Feild T2,ID2 - > T3,ID)

我需要的是来自T1的所有记录,只有来自T2的那些记录,其中T2.ID1等于T1.ID,T3记录来自T2.ID3 = T3.ID

情况是T1是一个零件清单,T2是一个订单行列表,T3是订单头。第一个关系是任何部分(T1)可以出现在许多订单行(T2)上,第二个关系是任何订单行(2)只有一个订单头(T3)但订单头可以有多行。

到目前为止我得到的是:

SELECT ar.customer_id,
    ar.invnumber,
    ar.transdate,
    invoice.qty,
    parts.partnumber,
    parts.description,
    parts.rop,
    parts.bin,
    parts.obsolete,
    parts.partsgroup_id,
    parts.onhand
FROM (parts LEFT JOIN invoice ON 
     parts.id = invoice.parts_id) 
    INNER JOIN ar ON invoice.trans_id = ar.id 

但是他并没有给我任何不在任何订单行上的部分。 PARTS = T1,ORDER LINES = T2,AR = T3

2 个答案:

答案 0 :(得分:0)

我认为问题在于您在左连接后进行内连接。然后内部联接丢弃在T3上没有匹配的左联接的结果。 试试这个FROM子句并让我知道:

FROM (invoice INNER JOIN ar ON invoice.trans_id = ar.ID) 
      RIGHT JOIN parts ON parts.id = invoice.parts_id

答案 1 :(得分:0)

您应INNER JOIN orderlineARLEFT JOIN Parts

SELECT ar.customer_id,
ar.invnumber,
ar.transdate,
invoice.qty,
parts.partnumber,
parts.description,
parts.rop,
parts.bin,
parts.obsolete,
parts.partsgroup_id,
parts.onhand
FROM ar
INNER JOIN invoice ON invoice.trans_id = ar.id
LEFT JOIN parts ON parts.id = invoice.parts_id