1

Temat: Problem z select case

Cześć,

mam następujący problem. Mam dwie tabele
slownik_slowo ( id, slowo) oraz
slownik_opis (id,opis)

slownik_slowo.id=slownik_opis.id

Działa mi 1 warunek i 3, problem mam z drugim,


select
case
    when    'z1'='-1' then slowo
    when (SUM(CHAR_LENGTH('z1')))>1  then ( select slowo from f.slownik_opis a join f.slownik_slowo b on a.id=b.id  where b.slowo like '%z1%')
    else null
    ---(select slowo from f.slownik_opis a join f.slownik_slowo b on a.id=b.id  where b.slowo like '-1')
    end,
case
    when    'z1'='-1' then opis
    when  (SUM(CHAR_LENGTH('z1')))>1 then ( select opis from f.slownik_opis a join f.slownik_slowo b on a.id=b.id  where b.slowo like '%z1%')
    else  null
    --( select opis from f.slownik_opis a join f.slownik_slowo b on a.id=b.id  where b.slowo like '-1')
    end,
case
    when    'z1'='-1' then dodal
    when (SUM(CHAR_LENGTH('z1')))>1 then ( select dodal from f.slownik_opis a join f.slownik_slowo b on a.id=b.id  where b.slowo like '%z1%')
     else null
     -- (select dodal from f.slownik_opis a join f.slownik_slowo b on a.id=b.id  where b.slowo like '-1')
    end

from f.slownik_opis a join f.slownik_slowo b on a.id=b.id where slowo like (upper('%-1%'))
group by b.slowo,a.opis, dodal


ERROR:  more than one row returned by a subquery used as an expression

Problem jest jak jedno slowo(czyli zmienna z1) ma dwa opisy.
Jak zbudować funkcję żeby dało się wykonać ten warunek ? Niestety odpada CREATE FUNCTION.

Jakieś podpowiedzi ?

2

Odp: Problem z select case

Ale co ma się pojawić w wyniku jak słowo ma dwa opisy?

3

Odp: Problem z select case

Cześć,
przykładowo przy zmiennej 'ło'
wynika ma być taki:

słońce - opis 1
słońce - opis 2
słoń - opis
słony - opis

czyli mamy dwa razy te same słowo, ale różne opisy.

4

Odp: Problem z select case

Problem rozwiązany, może komuś się przyda.

select slowo,opis,dodal
from  f.slownik_slowo  where slowo like
(
    select
         case
                when zmienna='-1' then '%'
                when  (SUM(CHAR_LENGTH(zmienna)))>1 then ('%'||upper(zmienna)||'%')
                else null
                end
                )
                group by slowo,opis, dodal
Pozdrawiam.