2013-06-27 44 views
0

我需要加入5個表才能獲得特定賬單號碼。加入5個表

表是

  1. 法案,
  2. Service_bill
  3. Damage_cost
  4. Extraperson_cost
  5. Advance_cost

除了bill,其他所有表都可以存儲空值。

我的查詢是像下面...

select bill.bill_no, 
     bill.total, 
     bill.discount, 
     bill.to_be_paid, 
     isnull(Service_bill.total_amt,0) as ServiceCharge, 
     isnull(Damage_cost.total_amt,0) as DamageCost, 
     isnull(Extraperson_cost.total_amt,0) as ExtraCost, 
     isnull(Advance_cost.total_amount,0) as Advance 
from  bill 
left join Advance_cost  on bill.bill_no=Advance_cost.room_bill_no and bill.bill_no='57' 
inner join Service_bill  on bill.bill_no=Service_bill.room_bill_no 
inner join Damage_cost  on bill.bill_no=Damage_cost.room_bill_no 
inner join Extraperson_cost on bill.bill_no=Extraperson_cost.room_bill_no 

現在它返回的數據的,它連接情況越來越真實。

第一個表應該有值,其他表只有null,所以它必須完全返回第一個表。但我不知道爲什麼會這樣!

+0

無法明白你的意思是「第一臺應該有值,那麼其他的表是空只所以它必須完全返回第一個表。但我不知道爲什麼就這樣產生了??? ?」 – Kangkan

回答

0

由於內維爾ķ...我知道了使用外加入...

select bill.bill_no,bill.total,bill.discount,bill.to_be_paid, 
     isnull(Service_bill.total_amt,0) as ServiceCharge, 
     isnull(Damage_cost.total_amt,0) as DamageCost, 
     isnull(Extraperson_cost.total_amt,0) as ExtraCost, 
     isnull(Advance_cost.total_amount,0) as Advance 
from bill 
left join Advance_cost   on bill.bill_no=Advance_cost.room_bill_no 
left outer join Service_bill  on bill.bill_no=Service_bill.room_bill_no 
left outer join Damage_cost  on bill.bill_no=Damage_cost.room_bill_no 
left outer join Extraperson_cost on bill.bill_no=Extraperson_cost.room_bill_no 
where bill.bill_no='57' 
2

內部聯接意味着您只能爲所有其他4張表中的記錄找到賬單。改用外部連接。

此外,您是限制的結果,這些項目那裏是在「advance_cost」一個紀錄爲57法案這probaly沒有想法......