2014-01-15 41 views
0

我有三个表像我描述如下:加盟SQL两个或多个表

TransactionHeader

ID | ProcessID | BillingHeaderID 
1    1     1 
2    2     2 

TransactionDetail

ID | ProcessID | BillingDetailID 
1    1     1 
2    1     2 

BillingDetail

BillingDetailID | BillingHeaderID | Amount 
3      2     10000 
4      2     20000 
5      2     10000 
6      1     10000 
7      1     10000 

我这样做到目前为止

select 
    b.ID as ID_TransacHeader, 
    a.ID as ID_TransacDetail, 
    b.ProcessID 
    ,a.BillingDetailID as Before 
    ,c.BillingDetailID as After 
from TransactionDetail a 
inner join TransactionHeader b on a.ProcessID = b.ProcessID 
inner join billingdetail c on b.BillingHeaderID = c.BillingHeaderID 

什么,我想获得的结果是这样的:

ID_TrnsacHeader | ID_TransacDetail | ProcessID | Before | After 
    1      1    1   1   6 
    1      2    1   2   7 

问题是我的查询导致这样的事情上面:

ID_TrnsacHeader | ID_TransacDetail | ProcessID | Before | After 
    1      1    1   1   6 
    1      2    1   2   6 
    1      1    1   1   7 
    1      2    1   2   7 

我的目标是显示表TransactionDetail上的BillingDetailID之间的差异,我称之为“之前”和BillingDetailID表BillingDetail我是由“之后”调用。 任何人都可以给我一个方向?

在此先感谢

+0

你如何选择哪你想要的四个可能的行中? –

+0

您试图应用于此查询的规则是什么? – JsonStatham

+0

@selalu ...只需在结算明细上添加一项条件(a.billingdetailid = c.billingdetailid) – Kishore

回答

1

试试这个.......

select 
    b.ID as ID_TransacHeader, 
    a.ID as ID_TransacDetail, 
    b.ProcessID 
    ,a.BillingDetailID as Before 
    ,c.BillingDetailID as After 
from TransactionDetail a 
inner join TransactionHeader b on a.ProcessID = b.ProcessID 
inner join billingdetail c on b.BillingHeaderID = c.BillingHeaderID and a.billingdetailid = c.billingdetailid 
+0

我不认为这是可能的。因为我的目标是显示表TransactionDetail上的BillingDetailID和BillingDetail之间的差异。如果我再添加一个条件就像你的建议,它会返回0行 –

0

要连接两个或多个表这个例子可以帮助你:

select * 
from 
    tableA a 
     inner join 
    tableB b 
     on a.common = b.common 
     inner join 
    TableC c 
     on b.common = c.common