Usunięcie duplikatów z zapytania w złączeniu tabel

Usunięcie duplikatów z zapytania w złączeniu tabel
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam mniej więcej takie zapytanie, gdzie wyświetlam odpowiednie rekordy tabeli A, ale niestety nie wiem jak w tym wypadku usunąć rekordy, w których pole name się powtarza, chodzi o fragment "join A a on a.name=c.name". Chciałbym te zapytanie tak skonstruować, aby nie były wyświetlane duplikaty pola name np. jeśli w polu name pojawi się dwa razy wartość 123, to w wyniku chcę mieć ostatnią znalezioną pozycję z tą wartością w tym polu.

Kopiuj
select a.* from B b join C c on b.id=c.id join A a on a.name=c.name join WS ws on ws.name=c.name join K k on k.id_K=p.id_K where  ws.version = 2
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

A pewny jesteś? Bo "ostatnia" może być zupełnie losowa ze względu na to że nie wiesz jak baza wykona dane zapytanie i w jakiej kolejnosci odczyta rekordy. Ba, może być i tak że dwa zapytania pod rząd dadzą ci inny wynik.

  • Rejestracja: dni
  • Ostatnio: dni
0

Hmm, na tą 'ostatnią' jeszcze pomyśle, ale generalnie chcę mieć tak, żeby w polu name nie pojawiały się duplikaty, przyjmijmy na razie, że nie obchodzi mnie jaki to będzie dokładnie rekord.

K2
  • Rejestracja: dni
  • Ostatnio: dni
0

A może tak?

Kopiuj
SELECT DISTINCT a.name, a.* FROM B b JOIN C c ON b.id=c.id JOIN A a ON a.name=c.name JOIN WS ws ON ws.name=c.name JOIN K k ON k.id_K=p.id_K WHERE  ws.version = 2
Vardamir
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1

Nie napisałeś jaki silnik bazy. Odnosząc się do SQL Server, na ten moment przychodzą mi na myśl dwa rozwiązania:

  1. Podzapytanie grupujące po wybranej kolumnie i zwracające minimalne id dla każdej z nich. Następnie SELECT tylko po tych id.

  2. Skorzystanie z CTE i funkcji rankingowej ROW_NUMBER() dla okna OVER().

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.