ďťż
 
[pgsql] Wybieranie z dwoch tabel - z drugiej tylko jeden rekord ďťż
 
[pgsql] Wybieranie z dwoch tabel - z drugiej tylko jeden rekord
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

[pgsql] Wybieranie z dwoch tabel - z drugiej tylko jeden rekord



Pseudo - 30-01-2006 10:31
[pgsql] Wybieranie z dwoch tabel - z drugiej tylko jeden rekord
  Mam dwie tabelki:

wnioski i wnioski_klienci

(wnioski_klienci - sa tu klienci do poszczegolnych wnioskow, wniosek moze
miec 0 klientow ale rozniewz 1, 2, 3 itp klientow)

Teraz chce wyswietlic cala liste wszystkich wnioskow:
SELECT wnioski.id, wnioski.status FROM wnioski WHERE (wnioski.status=1)
ORDER BY wnioski.id ASC

I to dziala ok.

Ale chcialbym jeszcze wysietlic tylko jednego najnowszego klienta(czyli
takiego z najmniejszym id)

do kazdego wniosku.

Jak to wykonac ?





=?iso-8859-2?B?TWFjaWVqIFphd2Fkemnxc2tp?= - 30-01-2006 10:31

  On Fri, 27 Jan 2006 15:14:30 +0100, Pseudo <pseudo@alpha.net.pl> wrote:

>
> Jak to wykonac ?
>

Coś w stylu...

SELECT wnioski.id, wnioski.status, MIN(wnioski_klienci.id) \
FROM wnioski INNER JOIN wnioski_klienci ON \
wnioski_klienci.wniosek=wnioski.id WHERE \
(wnioski.status=1) GROUP BY wnioski.id \
ORDER BY wnioski.id ASC

A najlepiej to poczytaj dokumentację. Wszystko tam masz ładnie opisane.

Pozdrawiam,

--
Maciej Zawadziński

Akademia Alternatywnych Systemów Operacyjnych [ http://www.aaso.pl/ ]
Organizacja studencka AASOC [ http://www.aasoc.pwr.wroc.pl/ ]




=?iso-8859-2?Q?Andrzej_Str=F3=BFy=F1ski?= - 30-01-2006 10:31

 
Użytkownik "Pseudo" <pseudo@alpha.net.pl> napisał w wiadomości
news:48119$43da2ac8$540a469c$6897@news.chello.pl.. .
> Mam dwie tabelki:
>
> wnioski i wnioski_klienci
>
> (wnioski_klienci - sa tu klienci do poszczegolnych wnioskow, wniosek moze
> miec 0 klientow ale rozniewz 1, 2, 3 itp klientow)
>
> Teraz chce wyswietlic cala liste wszystkich wnioskow:
> SELECT wnioski.id, wnioski.status FROM wnioski WHERE (wnioski.status=1)
> ORDER BY wnioski.id ASC
>
>
>
> I to dziala ok.
>
>
>
> Ale chcialbym jeszcze wysietlic tylko jednego najnowszego klienta(czyli
> takiego z najmniejszym id)
>
> do kazdego wniosku.
>
>
>
> Jak to wykonac ?

Nie napisałeś nic o nazwach pól drugiej tabeli a poza tym nie do końca
rozumiem jak to z tym najmniejszym id - id winiosku czy klienta? Jeśli
klient ma swoje id to pewnie są trzy tabele: wnioski, klienci i spinająca
je tabela wnioski_klienci.
Niezaleznie od tego, poniższy sposób pewnie się Tobie przyda.

SELECT a.id, a.status, b.id_klienta FROM wnioski a INNER JOIN
wnioski_klienci b ON
(
a.id=b.id_wniosku and b.id_klienta=
(
SELECT x.id_klienta FROM wnioski_klienci x WHERE x.id_wniosku=a.id ORDER BY
x.id_klienta LIMIT 1
))
WHERE (a.status=1) ORDER BY a.id ASC

Tak na oko, to powinno działać. Jak będą problemiki to podaj więcej danych.

A.S.




Pseudo - 30-01-2006 10:31

  > SELECT wnioski.id, wnioski.status, MIN(wnioski_klienci.id) \
> FROM wnioski INNER JOIN wnioski_klienci ON \
> wnioski_klienci.wniosek=wnioski.id WHERE \
> (wnioski.status=1) GROUP BY wnioski.id \
> ORDER BY wnioski.id ASC

To mi pomoglo:
Takie zapytanie zwraca ok:

SELECT wnioski.id FROM wnioski INNER JOIN wnioski_wnioskodawcy ON
(wnioski.id=wnioski_wnioskodawcy.wnioski_id) WHERE (wnioski.status=1) GROUP
BY wnioski.id

Chce odczytac jeszcze status wniosku i imie wnioskodawcy ale to juz nie
dziala:

SELECT wnioski.id, wnioski.status, wnioski_wnioskodawcy.imie FROM wnioski
INNER JOIN wnioski_wnioskodawcy ON
(wnioski.id=wnioski_wnioskodawcy.wnioski_id) WHERE (wnioski.status=1) GROUP
BY wnioski.id

ERROR: column "wnioski.status" must appear in the GROUP BY clause or be
used in an aggregate functionCzy pozostaje mi tylko uzycie dwoch zapytan
?tzn oierwsze wybieram wszystkie wnioski a pozniej w petli wybieram imie
wnioskodawcy z drugiej tabeli z ORDER BY id ASC, LIMIT 1 ?





Andrzej Stróżyński - 30-01-2006 10:31

 
Użytkownik "Pseudo" <pseudo@alpha.net.pl> napisał w wiadomości
news:ae26e$43da44c2$540a469c$12115@news.chello.pl. ..
>> SELECT wnioski.id, wnioski.status, MIN(wnioski_klienci.id) \
>> FROM wnioski INNER JOIN wnioski_klienci ON \
>> wnioski_klienci.wniosek=wnioski.id WHERE \
>> (wnioski.status=1) GROUP BY wnioski.id \
>> ORDER BY wnioski.id ASC
>
> To mi pomoglo:
> Takie zapytanie zwraca ok:
>
> SELECT wnioski.id FROM wnioski INNER JOIN wnioski_wnioskodawcy ON
> (wnioski.id=wnioski_wnioskodawcy.wnioski_id) WHERE (wnioski.status=1)
> GROUP BY wnioski.id

Ale to zapytanie nie daje żadnej informacji o kliencie (a to chciałeś
uzyskać)!
Dostajesz tylko listę tych wniosków, które mają choć jednego klienta (a są
takie bez wnioskodawcy?)
Zakładając, że wnioski.id jest unikalne to GROUP BY jest tutaj zbędne
(potrzebne było razem z MIN do wyciągnięcia jednego klienta wniosku).

> Chce odczytac jeszcze status wniosku i imie wnioskodawcy ale to juz nie
> dziala:
>
> SELECT wnioski.id, wnioski.status, wnioski_wnioskodawcy.imie FROM wnioski
> INNER JOIN wnioski_wnioskodawcy ON
> (wnioski.id=wnioski_wnioskodawcy.wnioski_id) WHERE (wnioski.status=1)
> GROUP BY wnioski.id
>
> ERROR: column "wnioski.status" must appear in the GROUP BY clause or be
> used in an aggregate functionCzy pozostaje mi tylko uzycie dwoch zapytan
> ?tzn oierwsze wybieram wszystkie wnioski a pozniej w petli wybieram imie
> wnioskodawcy z drugiej tabeli z ORDER BY id ASC, LIMIT 1 ?

Ta część zapytania (jednego!) pozwala właśnie wydobyć jednego wnioskodawcę -
tego z najmniejszym id.
Ciągle nie podałeś jak to z tym id klienta więc przyjmuję, że istnieje pole
id_klienta w tabeli wnioski_wnioskodawcy i według niego wybieramy
najnowszego klienta.
Zapodaj takie coś:

SELECT a.id, a.status, b.imie FROM wnioski a INNER JOIN wnioski_wnioskodawcy
b ON (a.id=b.wnioski_id and b.id_klienta=
(
SELECT x.id_klienta FROM wnioski_wnioskodawcy x WHERE x.wnioski_id=a.id
ORDER BY
x.id_klienta LIMIT 1
))
WHERE (a.status=1) ORDER BY a.id ASC

działa?

A.S.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= =?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?= [mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?= =?ISO-8859-2?Q?WY=B6wietlenie_rekord=F3w_pocz=B1wszy_od_?==?I SO-8859-2?Q?danej_litery=2E=2E=2E?= [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?= =?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lubiatowo.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