ďťż
 
Left Outer Join - problem ďťż
 
Left Outer Join - problem
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Left Outer Join - problem



Tdobe - 04-07-2007 00:01
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 | Polska
2 | Czechy
3 | Rosja

Panstwo_id (PK)

Tabela nr2: Obywatele

Obywatel_id | Panstwo_id | Nazwisko | rok urodzenia
------------------+------------------+--------------
+----------------------
20 | 1 | Kowalski | 1978
21 | 1 | Nowak | 1882
22 | 1 | Boniek | 1965
23 | 2 | Harvad | 1966
24 | 2 | Munzar | 1988
25 | 3 | Putin | 1945

Obywatel_id (PK)
FK (Panstwo_id)

I teraz za pomocą złączenia lewego zewnętrznego chciałbym uzyskać
listę wszystkich państw oraz par Państwo - Osoba z rokiem urodzenia
pomiędzy 1982 a 2000

Czyli oczekiwany wynik wyglądałby następująco:

# |Panstwo_id | Państwo | Obywatel_id | Nazwisko | rok urodzenia
--------------------+-------------+-------------------+---------------
+----------------------
1|1 | Polska | 21 | Nowak | 1982
2|2 | Czechy | 24 | Munzar | 1988
3|3 | Rosja | null | null |
null

wstepnie widzialbym to tak:

select a.panstwo_id, a.panstwo, b.obywatel_id, b.nazwisko,
b.rok_urodzenia
from panstwa a left outer join obywatele b on(a.panstwo_id =
b.panstwo_id)
where (b.rok_urodzenia between 1982 and 2000)or(b.rok_urodzenia is
null)

problem w tym ze czegos brakuje, gdyz takie zapytanie nie wygeneruje
rekordu #3, gdyz rok urodzenia putina ani nie bedzie nullem (gdyz
zostanie on połączony poprzez left outer join - czyli po prawej będą
dane) ani nie zawiera się w warunku between, wiec rekord z panstwem nr
3 nie bedzie wogole wyświetlony.

Podejrzewam ze trzeba sprytniej skonstruować warunek where, albo cos
jeszcze o czym nie wiem...





Sylwester Lewandowski - 04-07-2007 00:01

  Witam,

Myslę, że to tak powinno wyglądać:

SELECT P.panstwo_id, P.panstwo_nazwa, O.obywatel_id,O.nazwisko, O.wiek
FROM Panstwa P
LEFT JOIN Obywatele O ON O.panstwo_id = P.panstwo_id
AND O.wiek BETWEEN 1982 AND 2000

PS. Masz błąd w danych ;):

21 | 1 | Nowak | *1882*

a wynik z posta to:
1|1 | Polska | 21 | Nowak | *1982*

Pozdrawiam,
Sylwester Lewandowski




Tdobe - 05-07-2007 00:00

  juz sprawdzam, a blad jest bo pisalem z "czapki"




Tdobe - 05-07-2007 00:00

  Dokładnie tak ma być, taki pomysł też mi przechodził przez głowę, ale
jakoś tego nie wyprobowałem,

dzięki jeszcze raz
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= mysql i mysql-front, problem String line; if (line=="cos"){...}....problem Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?= [postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?= [oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?= Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ] [PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ? [MySQL] Problem z zapisem danych w bazie danych Problem z mysql - can't connect to MySQL/nietypowo...
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • bajkomoda.xlx.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com