0

我需要加入 5 个表才能获得特定的账单号。

表是

  1. 账单,
  2. 服务账单
  3. 伤害成本
  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才有,所以它必须完全返回第一个表。但我不知道为什么会这样!

4

2 回答 2

2

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

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

于 2013-06-27T13:36:43.083 回答
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'
于 2013-06-27T13:44:59.900 回答