[PostgreSql] Czy macie pomysł jak skonstruować selekta
slawekj - 15-05-2007 00:08
[PostgreSql] Czy macie pomysł jak skonstruować selekta
Witam,
Mam tabele NUMERKI w której przechowuje kombinacje numerów w jednym polu typu varchar
SELECT wynik FROM numerki WHERE id=1; wynik ---------------------------------------------------------------- (91325,44001,96057,101168,97874,95381,94694,94703, 92473,88127)
Przechowuje to w ten sposób aby następnie skontruować poniższe zapytanie za pomocą perla:
$wynik='(1,2,3,4,5,6,7,8,9,10)'; $query="SELECT * FROM pozycje WHERE nr IN $wynik";
Czy da się jednak zrobić to za pomocą jednego zapytania podobnego do
SELECT * FROM pozycje WHERE nr IN (select wynik from numerki where id=1)
Bo jak wiadomo zapytanie to nie zadziała ponieważ podajemy ciąg znaków zamiast listy. Macie jakiś pomysł? Oczywiście numery mogą być przechowywane w inny sposób, zależy mi jednak aby były w jednym rekordzie i chyba także w tym samym polu.
Pozdrawiam Sławek
=?UTF-8?B?RmlsaXAgUmVtYmlhxYJrb3dza2k=?= - 15-05-2007 00:08
slawekj wrote at 2007-05-14 16:24: > Witam, > > Mam tabele NUMERKI w której przechowuje kombinacje numerów w jednym polu > typu varchar > > SELECT wynik FROM numerki WHERE id=1; > wynik > ---------------------------------------------------------------- > (91325,44001,96057,101168,97874,95381,94694,94703, 92473,88127) > > Przechowuje to w ten sposób aby nastĂŞpnie skontruowaĂŚ poniÂższe zapytanie > za pomocÂą perla: > > $wynik='(1,2,3,4,5,6,7,8,9,10)'; > $query="SELECT * FROM pozycje WHERE nr IN $wynik"; > > Czy da siĂŞ jednak zrobiĂŚ to za pomocÂą jednego zapytania podobnego do > > SELECT * FROM pozycje WHERE nr IN (select wynik from numerki where id=1) > > Bo jak wiadomo zapytanie to nie zadziaÂła poniewaÂż podajemy ciÂąg znaków > zamiast listy. > Macie jakiÂś pomysÂł? > OczywiÂście numery mogÂą byĂŚ przechowywane w inny sposób, zaleÂży mi jednak aby > byÂły w jednym rekordzie > i chyba takÂże w tym samym polu.
użyj kolumny typu int[] i operatora @>
CREATE TABLE numerki ( id serial primary key, wynik int[] ) ; insert into numerki(wynik) select ARRAY[1,2,3]; insert into numerki(wynik) select ARRAY[4,5,6]; select * from numerki where wynik @> ARRAY[1]; select * from numerki where wynik @> ARRAY[4,5];
w twoim przypadku SELECT * FROM pozycje WHERE ARRAY[nr] <@ (select wynik from numerki where id=1)
F.
slawekj - 16-05-2007 00:00
> CREATE TABLE numerki ( id serial primary key, wynik int[] ) ; > insert into numerki(wynik) select ARRAY[1,2,3]; > insert into numerki(wynik) select ARRAY[4,5,6]; > select * from numerki where wynik @> ARRAY[1]; > select * from numerki where wynik @> ARRAY[4,5]; > > w twoim przypadku > SELECT * FROM pozycje WHERE ARRAY[nr] <@ (select wynik from numerki where > id=1) > F.
Pewnie będzie działać ładnie, jednak po dokumentacji wynika że w mojej wersji Postgresa 7.4 nie mogę jeszcze korzystać z operatorów <@ i @> Chyba będę musiał zainstalować nowa wersję.
Dziękuję i pozdrawiam Sławek
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.plets2.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 |
|