2013-06-27 3 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

Спасибо Невилл к ... я получил его, используя внешнее join ...

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 не идея ...