🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych
5 messages
5 total messages Started by Marek Sun, 01 Feb 2015 22:03
PostgreSQL - symulowanie dodatkowych pól tabeli
#194271
Author: Marek
Date: Sun, 01 Feb 2015 22:03
48 lines
1639 bytes
Witam,

Czy da się sformułować jakoś zapytanie SQL, które pozwoli na 
potraktowanie danych z 2 innych tabeli jako rozszerzenie SELECT * z 
bieżącej? Mam namyśli sytuacje następującą:

CREATE TABLE t1 (
   t1_id SERIAL PRIMARY KEY,
   poleA text,
   poleB text
);

CREATE TABLE nazwy_pol (
  nazwy_pol_id SERIAL PRIMARY KEY,
  nazwa varchar(50)
)

CREATE TABLE wartosci_pol (
  t1_id int4 REFERENCES t1 (t1_id),
  nazwy_pol_id int4 REFERENCES nazwy_pol (nazwy_pol_id),

  wartosc text
)

Jeśli tabela t1 zawiera:
15, "aaa", "bbb"

oraz jeśli tabela nazwy_pol zawiera rekordy:
1, poleC
2, poleD

a tabela wartosci_pol zawiera:
15, 1, "ccc"
15, 2, "ddd"

To chciałbym napisać SELECT *, który zwróci kolumny:
t1_id=1
poleA=aaa
poleB=bbb
poleC=ccc
poleD=ddd

Czy jest na to jakaś metoda?


-- 
Pozdrawiam,
Marek
Re: PostgreSQL - symulowanie dodatkowych pól tabeli
#194281
Author: Adam Klobukowski
Date: Mon, 02 Feb 2015 06:13
53 lines
2363 bytes
W dniu niedziela, 1 lutego 2015 23:03:22 UTC+1 użytkownik Marek napisał:
> Witam,
> 
> Czy da się sformułować jakoś zapytanie SQL, które pozwoli na 
> potraktowanie danych z 2 innych tabeli jako rozszerzenie SELECT * z 
> bieżącej? Mam namyśli sytuacje następującą:
> 
> CREATE TABLE t1 (
>    t1_id SERIAL PRIMARY KEY,
>    poleA text,
>    poleB text
> );
> 
> CREATE TABLE nazwy_pol (
>   nazwy_pol_id SERIAL PRIMARY KEY,
>   nazwa varchar(50)
> )
> 
> CREATE TABLE wartosci_pol (
>   t1_id int4 REFERENCES t1 (t1_id),
>   nazwy_pol_id int4 REFERENCES nazwy_pol (nazwy_pol_id),
> 
>   wartosc text
> )
> 
> Jeśli tabela t1 zawiera:
> 15, "aaa", "bbb"
> 
> oraz jeśli tabela nazwy_pol zawiera rekordy:
> 1, poleC
> 2, poleD
> 
> a tabela wartosci_pol zawiera:
> 15, 1, "ccc"
> 15, 2, "ddd"
> 
> To chciałbym napisać SELECT *, który zwróci kolumny:
> t1_id=1
> poleA=aaa
> poleB=bbb
> poleC=ccc
> poleD=ddd
> 
> Czy jest na to jakaś metoda?
> 
> 
> -- 
> Pozdrawiam,
> Marek

Pojedynczym zapytaniem, nie wydaje mi się, Da się natomiast napisać procedurę która to zrobi.

AdamK
Re: PostgreSQL - symulowanie dodatkowych pól tabeli
#194270
Author: Lesiok
Date: Mon, 02 Feb 2015 06:45
52 lines
2087 bytes
W dniu 2015-02-01 o 23:03, Marek pisze:
> Witam,
>
> Czy da się sformułować jakoś zapytanie SQL, które pozwoli na
> potraktowanie danych z 2 innych tabeli jako rozszerzenie SELECT * z
> bieżącej? Mam namyśli sytuacje następującą:
>
> CREATE TABLE t1 (
>    t1_id SERIAL PRIMARY KEY,
>    poleA text,
>    poleB text
> );
>
> CREATE TABLE nazwy_pol (
>   nazwy_pol_id SERIAL PRIMARY KEY,
>   nazwa varchar(50)
> )
>
> CREATE TABLE wartosci_pol (
>   t1_id int4 REFERENCES t1 (t1_id),
>   nazwy_pol_id int4 REFERENCES nazwy_pol (nazwy_pol_id),
>
>   wartosc text
> )
>
> Jeśli tabela t1 zawiera:
> 15, "aaa", "bbb"
>
> oraz jeśli tabela nazwy_pol zawiera rekordy:
> 1, poleC
> 2, poleD
>
> a tabela wartosci_pol zawiera:
> 15, 1, "ccc"
> 15, 2, "ddd"
>
> To chciałbym napisać SELECT *, który zwróci kolumny:
> t1_id=1
> poleA=aaa
> poleB=bbb
> poleC=ccc
> poleD=ddd
>
> Czy jest na to jakaś metoda?
>
>
Join na tabelach a potem funkcja crosstab.

-- 
Pozdrawiam,

Leszek KUBRAK
Re: PostgreSQL - symulowanie dodatkowych pól tabeli
#194273
Author: Marek
Date: Mon, 02 Feb 2015 10:22
10 lines
1086 bytes
W dniu 2015-02-02 o 07:45, Lesiok pisze:
>>
> Join na tabelach a potem funkcja crosstab.
>

O, dziękuję. To będzie rozwiązanie :-)

-- 
Pozdrawiam,
Marek
Re: PostgreSQL - symulowanie dodatkowych pól tabeli
#194282
Author: M.M.
Date: Mon, 02 Feb 2015 11:29
54 lines
2625 bytes
On Monday, February 2, 2015 at 7:13:46 AM UTC+1, Adam Klobukowski wrote:
> W dniu niedziela, 1 lutego 2015 23:03:22 UTC+1 użytkownik Marek napisał:
> > Witam,
> > 
> > Czy da się sformułować jakoś zapytanie SQL, które pozwoli na 
> > potraktowanie danych z 2 innych tabeli jako rozszerzenie SELECT * z 
> > bieżącej? Mam namyśli sytuacje następującą:
> > 
> > CREATE TABLE t1 (
> >    t1_id SERIAL PRIMARY KEY,
> >    poleA text,
> >    poleB text
> > );
> > 
> > CREATE TABLE nazwy_pol (
> >   nazwy_pol_id SERIAL PRIMARY KEY,
> >   nazwa varchar(50)
> > )
> > 
> > CREATE TABLE wartosci_pol (
> >   t1_id int4 REFERENCES t1 (t1_id),
> >   nazwy_pol_id int4 REFERENCES nazwy_pol (nazwy_pol_id),
> > 
> >   wartosc text
> > )
> > 
> > Jeśli tabela t1 zawiera:
> > 15, "aaa", "bbb"
> > 
> > oraz jeśli tabela nazwy_pol zawiera rekordy:
> > 1, poleC
> > 2, poleD
> > 
> > a tabela wartosci_pol zawiera:
> > 15, 1, "ccc"
> > 15, 2, "ddd"
> > 
> > To chciałbym napisać SELECT *, który zwróci kolumny:
> > t1_id=1
> > poleA=aaa
> > poleB=bbb
> > poleC=ccc
> > poleD=ddd
> > 
> > Czy jest na to jakaś metoda?
> > 
> > 
> > -- 
> > Pozdrawiam,
> > Marek
> 
> Pojedynczym zapytaniem, nie wydaje mi się, Da się natomiast napisać procedurę która to zrobi.

To źle Ci się nie wydaje. 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads