Wpis z mikrobloga

#sql #programowanie

Mam pytanie dotyczące podstaw SQL, ale nigdzie nie znalazłem rozwiązania tego problemu. Weźmy dla przykłady taką tabelę:

Tabela Klienci
KlientID, KlientImie, KlientNazwisko, KlientUlica, KlientMiasto

oraz druga tabela:

Zamówienia
ZamowienieID, ZamowienieKlientID, Zamowienie
Nazwa

Chciałbym wyjąć z bazy tylko zamówienia klientów, którzy ulica to "Marszałkowska". Ale Ci klienci zamówiali wiele razy, więc w tabeli zamówienia powtarza się ZamowienieKlientID wielokrotnie. Jak wyciągnąć z bazy tylko pojedyncze wiersze z KlientID i np. KlientMiasto ?

Wiem, że jest SELECT DISTINCT ale czy jest jakaś inna metoda? Bo mam wrażenie, że DISTINCT jest dość zasobożerny.
  • 7
via Wykop Mobilny (Android)
  • 0
@PrzywodcaFormacjiSow: a to imie i nazwisko chcesz miec też w tym rekordzie? W sensie ma Ci zwrocic id klienta, imie, nazwisko tych ktorzy zamawiali z ulicy "Marszalkowskiej"? To może coś jak SELECT k.klientImie, k.klientNazwisko, k.kliendId FROM klient k JOIN Zamowienia z ON k.klientId = z.zamowienieKlientaID WHERE k.klientUlica = "Marszałkowska" GROUP BY z.zamowienieKlienta
@lekkonieobecny: @MrFisherman:

Przykładowe wyniki byłby takie (nie sprecyzowałem, że chodzi mi o konkretny produkt z zamówienia np. "Odtwarzacz MP3"

SELECT K.KlientID, K.KlientUlica, K.KlientImie, K.KlientNazwisko
FROM Klienci, Zamowienia
WHERE Z.ZamowienieNazwa = "Odtwarzacz MP3" and K.KlientID = Z.ZamowienieKlientID

Wyniki:

444555,Marszałkowska,Jan,Nowak
444555,Marszałkowska,Jan,Nowak
444555,Marszałkowska,Jan,Nowak
239777,Marszałkowska,Jerzy,Węgiel
98765,Marszałkowska,Alicja Malinowska
98765,Marszałkowska,AlicjaMalinowska

Wiem, że można użyć SELECT DISTINCT ale przy większym zapytaniu czy byłoby to optymalne? Having tutaj jest ok?