2014-01-15 3 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 

Моя цель состоит в том, чтобы показать разницу между BillingDetailID в таблице TransactionDetail, которую я назвал «Before» и 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

Я не думаю, что это возможно. Потому что моя цель - показать разницу между BillingDetailID в таблице TransactionDetail и 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 
Смежные вопросы