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

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.

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
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.

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.

0

A może tak?

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
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().

1 użytkowników online, w tym zalogowanych: 0, gości: 1