Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MSSQL] Grupowanie wyników zapytania
witosza
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 1.06.2007
Skąd: Łódź

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


Jak uzyskać w wyniku następującego zapytania rekordy z unikalnym ID?



(IMG:http://www.ranking.filmow.dvd.ys.pl/inne/pyt.jpg)

(IMG:http://www.ranking.filmow.dvd.ys.pl/inne/diag.jpg)
Go to the top of the page
+Quote Post
UDAT
post
Post #2





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


Poszukaj o DISTINCT i/lub GROUP BY
Go to the top of the page
+Quote Post
witosza
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 1.06.2007
Skąd: Łódź

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


Próbowałem już z DISTINCT i GROUP BY ale serwer zwraca mi komunikat,
że nie można ich użyć z polami typu text (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Cytat(UDAT @ 21.06.2007, 11:22:51 ) *
Poszukaj o DISTINCT i/lub GROUP BY
Go to the top of the page
+Quote Post
styx
post
Post #4





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 21.11.2005

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


nie chce mi się wierzyć że wyskakują jakieś błędy z wykorzystaniem GROUP BY, pokaż select-a swojego albo spróbuj tak:

rozumiem ze tabela 1 i 3 mają te same id
  1. SELECT tabela1.id, tabela2.symb,tabela3.tresc
  2. FROM tabela1,tabel2,tabel3 WHERE (tabela1.id = tabela3.id) AND (tabela3.id_symb = tabela2.id_symb) AND (tabela3.id IN (SELECT DISTINCT tabela1.id
  3. FROM tabela3, tabela 2
  4. WHERE (tabela3.id_symb = tabela2.id_symb) AND (tabela2.symb LIKE '7%')
  5. )


Ten post edytował styx 22.06.2007, 21:50:54
Go to the top of the page
+Quote Post
witosza
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 1.06.2007
Skąd: Łódź

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


Oto wynik Twojej wersji zapytania styx, po małej korekcie:

(IMG:http://www.ranking.filmow.dvd.ys.pl/inne/pyt2.jpg)

Niestety z podzapytaniem też nie działa. Znalazłem dwa inne rozwiązania,
nie do końca idealne, bo chciałem to rozwiązać jednym zapytaniem.

1. Dwa zapytania. W pierwszym robię select tylko z ID i grupuję je.
W wyniku dostaję unikalne ID spełniające dany warunek, które następnie
zapisuję do tablicy. W drugim zapytaniu za warunek podstawiam tablicę,
w której mam numery ID.

2. W zapytaniu robię konwersję pola tekstowego na varchar. Wadą tego rozwiązania
w przypadku SQL Server 2000 jest to, że przytnie tekst do 256 znaków.
W SQL Server 2005 nie ma tego problemu, gdyż jest varchar(max) mieszczący 2GB danych.


Cytat(styx @ 22.06.2007, 22:50:22 ) *
nie chce mi się wierzyć że wyskakują jakieś błędy z wykorzystaniem GROUP BY...


Ten post edytował witosza 27.06.2007, 13:46:26
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #6


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


@styx: utrudniasz sobie życie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
@witosza: ja bym wyciągnął prostym selectem unikalne ID z tabeli pierwszej i jako podzapytanie wstawił do złączenia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
witosza
post
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 1.06.2007
Skąd: Łódź

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


Czy chodziło Ci o coś takiego?

(IMG:http://www.ranking.filmow.dvd.ys.pl/inne/pyt3.jpg)

Takie podzapytanie też się nie sprawdza.
Jeśli miałeś na myśli coś innego, to napisz co konkretnie.

Cytat(Zbłąkany @ 26.06.2007, 07:46:46 ) *
@styx: utrudniasz sobie życie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
@witosza: ja bym wyciągnął prostym selectem unikalne ID z tabeli pierwszej i jako podzapytanie wstawił do złączenia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


Ten post edytował witosza 27.06.2007, 13:49:02
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #8


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


  1. SELECT * FROM tabela2 INNER JOIN (SELECT DISTINCT id FROM tabela1) AS unikalne ON tabela2.id=unikalne.id;

Idea takich zapytań opiera się na:
  • mamy dwie lub więcej tabel, które są powiązane relacją na tym samym polu
  • najprostszym zapytaniem wciągamy unikalne wartości klucza
  • wynik powyższego zapytania łączymy z wymaganymi tabelami i pobieramy odpowiednie pola
Taka konstrukcja nie wymaga używania żadnych predykatów WHERE, LIKE, BETWEEN i żadnych dodatkowych warunków na złączeniach. Jest to wydajne i wygodne rozwiązanie tego typu problemów, bo używa się wewnętrznych mechanizmów, a nie czaso i zasobożernych predykatów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 18:05