Ich habe die folgenden Tabellen (Ich habe die Daten in den Tabellen vereinfacht).Outer Join oder dynamische Abfrage, was ist der beste Weg zu gehen?
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
Die RateExtra enthält nur 3 Werte mit Schlüssel des 1, 2 & 3 und Benzinzuschlag Namen, Verwaltungsgebühr und GST.
Dies funktioniert gut für den aktuellen Zweck. Eine Liste der Werte wird mit übereinstimmenden Datensätzen angezeigt, und RateExtra wird nur für den Namen rate_extra_name abgefragt.
So kann ich die folgenden Ergebnisse haben:
- Ratetable1, 1, PetrolSurcharge
- Ratetable1, 2, ManagementFee
- Ratetable2, 3, PetrolSurcharge
- Ratetable4, 4, GST
- Ratetable6, 5, PetrolSurcharge
I'v Sie wurden aufgefordert, dies so zu ändern, dass jeder Datensatz, der jetzt zurückgegeben wird, Datensätze für jeden Wert in der RateExtra-Tabelle enthält. Wenn keine übereinstimmenden Datensätze vorhanden sind, sollten die Daten aus meiner RateTableExtra-Tabelle als NULL zurückgegeben werden. So sollte meine Daten kommen zurück wie:
- 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
I OUTER habe versucht, schließt sich aber sie scheinen nicht zu funktionieren, nehme ich an, weil die RateExtra-Daten mit der RateTableExtra verknüpft sind, die null zurückgeben würde. Ich überlege mir nun, eine dynamische Abfrage zu erstellen, die meine ursprüngliche Ergebnismenge erhält, iteriere sie nach rate_extra_id und fügt, falls sie nicht bereits in der Ergebnismenge enthalten ist, eine neue Zeile an die Ergebnisse an, wo ich NULL-Daten benötige. Ich gehe davon aus, dass das funktionieren würde, aber ich habe das Gefühl, dass es ein Mörder für die Leistung sein würde.
Gibt es einen besseren Weg, dies zu tun? Hoffe, dass jemand helfen kann, es würde wirklich geschätzt werden.
Wenn Sie das RateTableExtra optional über einen rechten Join ausführen, müssen Sie das RateExtra optional auch über einen rechten Join vornehmen. Es ist nicht sinnvoll, den Grund für einen Aufpreis anzugeben, wenn tatsächlich kein Aufpreis vorhanden ist. Jacob – TheJacobTaylor