2009-07-05 7 views
0

J'ai un bon DataGridView montrant ce qui est fondamentalement un type de données de journal à l'utilisateur. L'utilisateur peut filtrer par district, région, localité et rue.
Jusqu'à présent, les ComboBoxes sont liés les uns aux autres, donc dans un premier temps que le quartier a des valeurs, et seulement après avoir choisi une, la région est une remplie avec les valeurs appropriées, etc.Filtrage d'une zone de liste déroulante par les valeurs disponibles

La nouvelle exigence est que tous les la liste montrera seulement les valeurs qui existent réellement dans la table de notation. Cela signifie que si le district 1 a 10 régions différentes, mais seulement 2 d'entre elles apparaissent dans les données, je montrerais seulement ces 2 régions. Cela semble assez raisonnable, en particulier pour les agglomérations et les rues, où le rapport entre les codes totaux et utilisés est beaucoup plus élevé.
J'ai pensé à deux façons principales de le faire.
D'abord, je peux filtrer avec JOIN:

select r.code, r.name 
from Region r 
join LogTable l on (r.code = l.regionCode) 
where r.districtCode = :districtCode; 

Ou je peux le faire avec une sous-sélection:

select r.code, r.name 
from Region r 
where r.code in (select distinct l.regionCode 
       from LogTable l) 
     and r.districtCode = :districtCode 

Une troisième option serait de démarrer avec la lecture de toutes les valeurs distinctes de district, région , le règlement et la rue sur le logTaable, puis utilisez l'option subselect avec une clause "in" pré-calculée. Cela semble un peu moins flexible, car les nouvelles valeurs entrées après la lecture initiale ne seront pas visibles.

Y a-t-il une différence majeure entre les façons? Ou les deux travailleraient-ils aussi bien?

P.S. Je ne pense pas qu'il y ait des index définis sur les colonnes du LogTable Code.

Répondre

0

Si Oracle a un analyseur de requête, vous devez l'exécuter sur vos trois options. Il vous dira lequel est le plus rapide. Cela devrait également vous indiquer si vous devez ajouter un index à LogTable.

+0

Oui, le sous-sélection était juste un peu plus rapide. Alors je l'ai choisi. –

Questions connexes