hilpers


  hilpers > comp.* > comp.bazy-danych.msaccess

 #1  
26.10.2006, 08:21
Marcin
Witam

mam następujący problem - jak w accessie połączyć dwie tabele, tak żeby z
pierwszej pojawiły się wszystkie rekordy a z drugiej tylko te które pasują?
Wydawało mi się, że to outer join, więc daję przykład:

Tabela A ma jedna kolumne:
id_A
1
2
3
4

Tabela B ma dwie koulmny (id_B i temperatura) z danymi:
id_B temperatura
1 36
2 37
1 38
4 36

Chcę dostać wynik w postaci średniej temperatury w 'grupach', ale w ten
sposób żeby pojawiły się _wszystkie_ grupy (także te, których w tabeli B nie
ma):
1 37
2 37
3 -
4 36

Robiąc poniższe zapytanie dostaje oczywiście to co chcę, ale pominięte są te
grupy dla których nie ma danych w tabeli B

SELECT A.id_A, AVG(B.temperatura)
FROM A LEFT OUTER JOIN B ON A.id_A=B.id_B
GROUP BY A.id_A;

dostaję wynik:
1 37
2 37
4 36

proszę o pomoc - jak zrobić żeby pojawiły się _wszystkie_ grupy?
robiłem też odpowiednie sprzężenie (wszystkie rekordy z A, i tylko te z B
które są równe danym z A) ale to nic nie dało. OUTER chyba powinien za to
odpowiadać, ale przeczytałem gdzieś, że on w ogóle nie działa, więc już nie
mam pojęcia co trzeba zrobić..

pozdrawiam
Marcin
 #2  
26.10.2006, 08:35
Grzegorz Danowski
Użytkownik "Marcin" <mlody.bog> napisał w wiadomości
news:rdt1
> Witam
>
> mam następujący problem - jak w accessie połączyć dwie tabele, tak żeby z
> pierwszej pojawiły się wszystkie rekordy a z drugiej tylko te które
> pasują?

(...)
> Robiąc poniższe zapytanie dostaje oczywiście to co chcę, ale pominięte są
> te
> grupy dla których nie ma danych w tabeli B
>
> SELECT A.id_A, AVG(B.temperatura)
> FROM A LEFT OUTER JOIN B ON A.id_A=B.id_B
> GROUP BY A.id_A;
>
> dostaję wynik:
> 1 37
> 2 37
> 4 36
>
> proszę o pomoc - jak zrobić żeby pojawiły się _wszystkie_ grupy?
> robiłem też odpowiednie sprzężenie (wszystkie rekordy z A, i tylko te z B
> które są równe danym z A) ale to nic nie dało.


Hmm, to może spróbuj:

Select
A.id_A, T.AvgTemp
From
A
Left Join
(Select
id_B,
Avg(temperatura) As AvgTemp
From
B
Group By
id_B) As T
On
A.id_A = T.id_B

Pozdrawiam
Grzegorz
 #3  
26.10.2006, 08:51
Marcin Filipczak
Grzegorz Danowski <gdn__na> napisał(a):

> Hmm, to może spróbuj:
>
> Select
> A.id_A, T.AvgTemp
> From
> A
> Left Join
> (Select
> id_B,
> Avg(temperatura) As AvgTemp
> From
> B
> Group By
> id_B) As T
> On
> A.id_A = T.id_B


doskonale :)
teraz oczywiście dziwię się jak mogłem na to nie wpaść, ale może to dlatego,
że nie wszystkie bazy obsługują podzapytania.

dzięki wielkie!

pozdrawiam
Marcin
Podobne wątki
LEFT OUTER JOIN

Witam grupe mam prosbe o mala pomoc z zapytaniem SQL - co jest nie tak w zapytaniu: SELECT obr.nrzam, obr.nrpoz, nag.klient, obr.nazwa, obr.ilosc, obr.datazam, obr.status,...

[Oracle] OUTER JOIN

Zauważyłem różnicę przy wykonywaniu zapytania w 8i (9i) oraz w 10g. W 8i: SQL> select version from v$instance 2 / VERSION ----------------- 8.1.7.4.0 SQL> select rownum,...

Laickie outer join

Ponizej jest zapytanie sql (mssql 2005), ktore wybiera slowa kluczowe (kazde ma pole jezyka ) i laczy to z tabela jezykow. Jesli nie ma slowa w danym jezyku to obok jezyka...

Left Outer Join - problem

Mam problem z pewnym selektem, left outer joinem i where Czyli mam dwie tabele: Tabela nr 1: Panstwa Panstwa_id | Panstwo -----------------+------------------ 1 ...


Czasy w strefie GMT. Teraz jest 23:13. | Privacy Policy