加入5个表

时间:2013-06-27 13:30:58

标签: sql sql-server-2005

我需要加入5个表来获取特定的账单号码。

表是

  1. bill,
  2. Service_bill
  3. Damage_cost
  4. Extraperson_cost
  5. Advance_cost
  6. 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,所以它必须完全返回第一个表。但我不知道为什么会这样!

2 个答案:

答案 0 :(得分:2)

内部联接意味着您只为在其他4个表中都有记录的人查找账单。请改用外连接。

此外,您将结果限制为第57号帐单中“advance_cost”中有记录的项目。这可能不是想法......

答案 1 :(得分:0)

感谢Neville k ...我使用外部联接......

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'