Re: [SQL] problem with select
От | José Soares |
---|---|
Тема | Re: [SQL] problem with select |
Дата | |
Msg-id | 37CBC957.AA46EC36@sferacarta.com обсуждение исходный текст |
Ответ на | problem with select (Holm Tiffe <holm@freibergnet.de>) |
Список | pgsql-sql |
Holm Tiffe ha scritto: > Tom Lane wrote: > > > Holm Tiffe <holm@freibergnet.de> writes: > > > What I try to find is a solution for a search in this table like this: > > > > > select distinct code,category from products where code ~* 'abc' or > > > category ~* 'abc' or manufacturer ~* 'abc' or description ~* 'abc' > > > or comment ~* 'abc' order by code; > > > > > So far so good, but I have the problem that I have the value 'abc' > > > only one times ! > > > > How about > > > > select distinct code,category from products where > > (code || category || manufacturer || ...) ~* 'abc'; > > > > Actually you'd probably want to also concatenate some separator markers, > > maybe (code || '|' || category || ...), so that you didn't get bogus > > matches across fields, like where code ends in 'a' and category starts > > with 'bc'. > > > > Note that this select will be a bit of a memory hog because > > text-slinging is very wasteful of space in 6.5 (the intermediate results > > from the concatenate operators don't get freed till end of transaction). > > So it might not be workable if you have a large database. I hope to see > > that fixed for 6.6 or 6.7. > > > > regards, tom lane > > Hm, clever. > > It is almost working, my database isn't that big that memory becomes a > problem; the machine has 512MB. > > But why is nothing found if one value of a column contains NULL ? > > select distinct code,category from products where (code || '|' || category > || '|' || comment || '|' || description || '|' || desc_de) ~* 'kde'; > code|category > ------+-------- > 06-001|KDE > (1 row) > > shop=> update products set comment = Null where code ='06-001'; > UPDATE 1 > shop=> select (comment || '|' || code) from products where code ~* '06-001'; > ?column? > -------- > > Try using the COALESCE function: select distinct code,category from products where (code || '|' || coalesce(category,' ') || '|' || coalesce(comment,' ') || '|' || coalesce(description,' ') || '|' || coalesce(desc_de,' ')) ~* 'kde'; José
В списке pgsql-sql по дате отправления: