我有以下表格(我簡化了表格中包含的數據)。外部連接或動態查詢,這是最好的方式嗎?
RateTable
- rate_table_id [int]
- rate_table_name [nvarchar(50)]
RateTableUsed
- rate_used_id [int]
- rate_table_id [int] (key to RateTable.rate_table_id)
- customer_id [int]
RateTableExtra
- rate_table_extra_id [int]
- rate_ extra_id [int] (key to RateExtra.rate_table_id)
- rate_used_id [int] (key to RateTableUsed.rate_used_id)
RateExtra
- rate_ extra_id [int]
- rate_extra_name [nvarchar(50)]
select rate_table_name, rate_table_extra_id, rate_extra_name from RateTableUsed rtu
innerjoin RateTable rt on rtu.rate_table_id = rt.rate_table_id
innerjoin RateTableExtra rte on rte.rate_table_id = rt.rate_table_id
innerjoing RateExtr re on rte.rate_extra_id = re.rate_extra_id
的RateExtra只包含3鍵的1,2 & 3名汽油附加費,管理費和消費稅值。
這是正常工作,因爲它是目前的目的。值列表正在顯示匹配的記錄,RateExtra僅針對rate_extra_name進行查詢。
因此,我可以具有以下結果:
- Ratetable1,1,PetrolSurcharge
- Ratetable1,2,ManagementFee
- Ratetable2,3,PetrolSurcharge
- Ratetable4,4,GST
- Ratetable6,5,PetrolSurcharge
I'v e被要求修改,以便每個返回的記錄現在包含RateExtra表中每個值的記錄。如果沒有匹配的記錄,那麼來自我的RateTableExtra表的數據應該返回爲NULL。所以,我的數據應該回來爲:
- Ratetable1,1,PetrolSurcharge
- Ratetable1,2,ManagementFee
- Ratetable1,NULL,GST
- Ratetable2,3,PetrolSurcharge
- Ratetable2,NULL, ManagementFee
- Ratetable2,NULL,GST
- Ratetable4,NULL,PetrolSurcharge
- Ratetable4,NULL,ManagementFee
- Ratetable4,4,GST
- Ratetable6,5,PetrolSurcharge
- Ratetable6,NULL,ManagementFee
- Ratetable6,NULL,GST
我試過OUTER連接但他們似乎沒有工作,我假設因爲RateExtra數據鏈接到RateTableExtra將返回null。我現在正在考慮創建一個動態查詢,它將獲得我的原始結果集,對它進行迭代檢查rate_extra_id,如果它不在結果集中,則在需要時使用NULL數據向結果附加新行。我假設這會起作用,但我有一種感覺,它會成爲性能上的殺手。
有沒有更好的方法來做到這一點?希望有人能幫助,這將是非常感激。
如果您通過正確加入使RateTableExtra成爲可選項,則必須通過正確加入來使RateExtra成爲可選項。事實上,沒有額外收費的情況下,推定額外收費的理由是沒有意義的。 Jacob – TheJacobTaylor 2009-08-18 04:47:33