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

Odpowiedz Nowy wątek
2014-12-23 16:17
Biały Kot
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
edytowany 1x, ostatnio: ŁF, 2016-12-13 18:26
Może znaczniki ? - Vardamir 2014-12-23 16:51

Pozostało 580 znaków

2014-12-23 16:23
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.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2014-12-23 16:29
Biały Kot
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.

Pozostało 580 znaków

2014-12-24 13:21
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

Pozostało 580 znaków

2014-12-24 13:48
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().


"There are people who actually like programming. I don't understand why they like programming."
Rasmus Lerdorf

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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