Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL] Grupowanie wyników zapytania
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
witosza
Jak uzyskać w wyniku następującego zapytania rekordy z unikalnym ID?





UDAT
Poszukaj o DISTINCT i/lub GROUP BY
witosza
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 sad.gif

Cytat(UDAT @ 21.06.2007, 11:22:51 ) *
Poszukaj o DISTINCT i/lub GROUP BY
styx
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. )
witosza
Oto wynik Twojej wersji zapytania styx, po małej korekcie:



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...
Zbłąkany
@styx: utrudniasz sobie życie tongue.gif
@witosza: ja bym wyciągnął prostym selectem unikalne ID z tabeli pierwszej i jako podzapytanie wstawił do złączenia smile.gif
witosza
Czy chodziło Ci o coś takiego?



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 tongue.gif
@witosza: ja bym wyciągnął prostym selectem unikalne ID z tabeli pierwszej i jako podzapytanie wstawił do złączenia smile.gif
Zbłąkany
  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 smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.