Liczba =?ISO-8859-2?Q?odpowiadaj=B1cych_rekord=F3w_z_drugi?==?ISO-8859-2?Q?ej_tabeli?=
Krzysztof Bielatowicz - 03-11-2007 00:02
Liczba =?ISO-8859-2?Q?odpowiadaj=B1cych_rekord=F3w_z_drugi?==?ISO-8859-2?Q?ej_tabeli?=
Witam
Sytuacja jest taka:
tabele: A, B i C
relacje: (FK) A.kol2----------B.kol1 (PK) 0..* 1
(PK) A.kol1----------C.kol2 (FK) 1 1..*
Potrzebuję dla każdego rekordu w tabeli A poznać liczbę odpowiadających rekordów w tabeli C:
A.kol3 | B.kol2 | A.kol4 | ile_rek_w_C -------------------------------------- aaa | BBB | 123 | 3 bbb | BBB | 254 | 2 ccc | FFF | 129 | 3
Baza danych: postgresql 8.2
Krzysztof Bielatowicz
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 03-11-2007 00:03
Krzysztof Bielatowicz wrote: > Witam > > Sytuacja jest taka: > > tabele: A, B i C > > relacje: > (FK) A.kol2----------B.kol1 (PK) > 0..* 1 > > (PK) A.kol1----------C.kol2 (FK) > 1 1..* > > Potrzebuję dla każdego rekordu w tabeli A poznać liczbę odpowiadających > rekordów w tabeli C: > > A.kol3 | B.kol2 | A.kol4 | ile_rek_w_C > -------------------------------------- > aaa | BBB | 123 | 3 > bbb | BBB | 254 | 2 > ccc | FFF | 129 | 3 > > Baza danych: postgresql 8.2
W podzapytaniu policz liczbę rekordów w C.
-- P.M.
Krzysztof Bielatowicz - 03-11-2007 00:03
Dnia 2 lis 2007 18:42, Użytkownik Paweł Matejski napisał: > > W podzapytaniu policz liczbę rekordów w C. >
Chyba działa:
SELECT A.kol3, B.kol2, A.kol4, (SELECT count(*) FROM C WHERE A.kol1=C.kol2) AS "ile_rek_w_C" FROM A JOIN B ON A.kol2=B.kol1;
Próbowałem wcześniej, ale mi nie wychodziło. Ta odpowiedź, chociaż mało konkretna dla kogoś, kto nie wie jak to zrobić - pomogła.
Dzięki
Krzysztof Bielatowicz
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 03-11-2007 00:03
Krzysztof Bielatowicz wrote: > Dnia 2 lis 2007 18:42, Użytkownik Paweł Matejski napisał: >> >> W podzapytaniu policz liczbę rekordów w C. >> > > Chyba działa: > > SELECT A.kol3, B.kol2, A.kol4, (SELECT count(*) FROM C WHERE > A.kol1=C.kol2) AS "ile_rek_w_C" FROM A JOIN B ON A.kol2=B.kol1; > > Próbowałem wcześniej, ale mi nie wychodziło. Ta odpowiedź, chociaż mało > konkretna dla kogoś, kto nie wie jak to zrobić - pomogła.
Wynik będziesz miał poprawny, ale wydajność możesz mieć kiepską (chyba, że ograniczasz ilość zwracanych rekordów A do kilku). Lepiej jest IMHO tak:
SELECT A.kol3, B.kol2, A.kol4,SC."ile_rek_w_C" FROM A, B, (SELECT C.kol2,count(*) AS "ile_rek_w_C" FROM C) SC WHERE A.kol2=B.kol1 AND A.kol1=SC.kol2;
-- P.M.
Krzysztof Bielatowicz - 04-11-2007 00:01
Dnia 2 lis 2007 20:28, Użytkownik Paweł Matejski napisał: > > Wynik będziesz miał poprawny, ale wydajność możesz mieć kiepską > (chyba, że ograniczasz ilość zwracanych rekordów A do kilku). > Lepiej jest IMHO tak: > > SELECT A.kol3, B.kol2, A.kol4,SC."ile_rek_w_C" > FROM A, B, > (SELECT C.kol2,count(*) AS "ile_rek_w_C" FROM C) SC > WHERE A.kol2=B.kol1 > AND A.kol1=SC.kol2; >
Dzięki, ale żeby ruszyło musiałem dać: .... (SELECT C.kol2,count(*) AS "ile_rek_w_C" FROM C GROUP BY C.kol2) ...
Krzysztof Bielatowicz
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MySQL/PHP] Wyszukiwanie rekordu przez kolumnę wskazaną przez zmienną
[MSSQL 2000] czas wykonywania instrukcji INSERT - czy zalezy od ilosci danych w tabeli?
[MSSQL] Jak uj?c w tabeli [ID usera] (zamiast tekstu) zuwierzytelniania NT?
[mysql 4.0.24] INSERT do tabeli z automatyczną inkrementacją wartości pola.
[MsSQL]Jaka blokada tabeli dla pobrania następnego nr faktury
[ms sql 2000] Replikacja - zmiana typu kolumny w tabeli ?
[Oracle] Jak opymalnie update'owac tabele danymi z innej tabeli
Nazwa tabeli jako parametr do procedury dla SQL2005 Server - jakprzekazac?
MS SQL - jak zwrócić zawartość tabeli tylko z wielkimi literami
clipper - jakie narzędzie pokaże daty wpisanych rekordów w bazie?
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|