Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak ugryźć taki problem w jednym zapytaniu?, Wyciąganie danych powtarzających się.
torbicki65
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 8.11.2008

Ostrzeżenie: (0%)
-----


Problem wydawałby się banalny (i być może jest), ale miałem sporą przerwę w SQL.
Mam tabelę zawierającą przykładowe pola (generalnie jest to zrzut z innej bazy, dlatego proszę nie patrzeć na to, że jest nieoptymalna):

Kod
sprzedawca | id_klient | sprzedaz


i dane w niej wyglądają tak, że klienci mogą być wyłącznościowi (tzn. jeden klient - jeden sprzedawca - jeden rekord w tabeli) lub współdzieleni (wtedy dla jednego klienta jest tyle rekordów ilu sprzedawców go obsługuje).

Potrzebuję wyciągnąć 2 rodzaje danych:
- klienci wyłącznościowi konkretnego sprzedawcy
- klienci pozostali konkretnego sprzedawcy

Generalnie poradziłem sobie na około, tzn. dla pierwszego przypadku zrobiłem grupowanie po kliencie, wziąłem tylko wystąpienia, gdzie count(id_klient) = 1 i gdzie sprzedawca jest ten, którego potrzebuję:
  1. SELECT klient FROM tabela GROUP BY id_klt_prod HAVING count(id_klt_prod)=1


dla drugiego problemu zrobiłem złączenie z tym zapytaniem, czyli:
  1. SELECT p1.* FROM tabela p1 LEFT JOIN klienci_wylaczni p2 ON p1.klient = p2.klient WHERE p2.klient IS NULL

gdzie klienci_wylaczni to wynik pierwszej kwerendy.

Jednak zasadniczo nie podoba mi się taka konstrukcja, czy ktoś ma ładniejszy pomysł na takie coś? Najlepiej, żeby nie robić już pośrednich kwerend..

Jeszcze do pierwszego problemu - chciałem dla klientów wyłączonych pokazać od razu przyporządkowanego sprzedawcę, jednak nie mogę zrobić tego bez grupowania po tym polu - czy jedyne wyjście to JOIN?

pozdrawiam i liczę na pomoc
Adam

Ten post edytował torbicki65 10.04.2012, 00:06:16
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:18