Buduję aplikację, która dynamicznie generuje sql w celu wyszukania wierszy określonej tabeli (jest to główna klasa domeny, podobnie jak pracownik).Uzyskiwanie różnych wierszy od lewego zewnętrznego łączenia
Dostępne są trzy tabele Tabela1, Tabela2 i Tabela1 Tabela2Mapa. Tabela 1 ma wiele do wielu relacji z tabelą 2 i jest odwzorowywana za pomocą tabeli Table1Table2Map. Ale ponieważ tabela 1 jest moją główną tabelą, relacja jest praktycznie jak jedna do wielu.
Moja aplikacja generuje sql, który zasadniczo daje zestaw wyników zawierający wiersze ze wszystkich tych tabel. Klauzula wyboru i sprzężenia nie zmieniają się, podczas gdy klauzula where jest generowana na podstawie interakcji użytkownika. W każdym razie nie chcę duplikatów wierszy tabeli 1 w moim zestawie wyników, ponieważ jest to tabela główna do wyświetlania wyników. Teraz zapytanie generowane jest w następujący sposób:
select distinct Table1.Id as Id, Table1.Name, Table2.Description from Table1
left outer join Table1Table2Map on (Table1Table2Map.Table1Id = Table1.Id)
left outer join Table2 on (Table2.Id = Table1Table2Map.Table2Id)
Dla uproszczenia wyłączyłem klauzulę where. Problem polega na tym, że w tabeli 2 dla tabeli 1 znajduje się wiele wierszy, nawet jeśli powiedziałem, że są odmienne od Table1.Id zestaw wyników ma zduplikowane wiersze tabeli 1, ponieważ musi wybrać wszystkie pasujące wiersze w tabeli 2.
Aby opracować więcej, należy wziąć pod uwagę, że dla wiersza w Tabeli 1 o Id = 1 są dwa wiersze w Tabeli 1 Tabela 2 Mapa (1, 1) i (1, 2) Tablica odwzorowań 1 do dwóch wierszy w Tabeli 2 z ids 1, 2. powyżej wspomniana kwerenda zwraca zduplikowane wiersze dla tego przypadku. Teraz chcę, aby zapytanie zwróciło wiersz Table1 o identyfikatorze 1 tylko jeden raz. Wynika to z tego, że w tabeli 2 znajduje się tylko jeden wiersz, który jest jak aktywna wartość dla odpowiedniego wpisu w tabeli 1 (ta informacja znajduje się w tabeli mapowania). Czy istnieje sposób uniknięcia powtarzania wierszy tabeli 1.
Myślę, że jest jakiś podstawowy problem w sposobie, w jaki próbuję rozwiązać problem, ale nie jestem w stanie dowiedzieć się, co to jest. Z góry dziękuję.
Jak odróżnić, który wiersz jest "aktywny" w tabeli 2? – Sung