Ako vrátiť viac ako jeden riadok z poddotaz používa ako výraz

0

Otázka

select case 
         when p.property_type ='APARTMENT_COMMUNITY' 
           then (select fp.bedroom_count 
                 from floor_plans fp 
                 where fp.removed = false 
                 and fp.property_id=p.id) 
         else (select pu.bedroom_count 
               from property_units pu 
               where pu.removed = false 
               and pu.property_id=p.id) 
        end 
from properties p 
where p.id =550

Som to,bedroom_count nie je jeden riadok,tak to dáva táto chyba

CHYBA: viac ako jeden riadok vráti poddotaz používa ako výraz

Musím si, že výsledok v prípade, že existuje nejaké iné riešenie?

postgresql sql
2021-11-24 06:24:39
3
0

Chyba pochádza zo skutočnosti, že buď prvý alebo druhý poddotaz vrátiť viac ako 1 riadok pre daný property_id (550). Z vašich komentárov

Chcem sa im všetkým ako výsledok

Hádam, že to, čo potrebujete, je ľavej pripojiť s oboch tabuľkách. Skúste tento

select p.property_type, coalesce(fp.bedroom_count, pu.bedroom_count) as bedroom_count
  from properties p
  left join floor_plans fp 
    on p.property_type = 'APARTMENT_COMMUNITY' and fp.removed = false and fp.property_id = p.id
  left join property_units pu
    on p.property_type <> 'APARTMENT_COMMUNITY' and pu.removed = false and pu.property_id = p.id
 where p.id = 550
2021-11-24 06:50:23
0

To znie, ako by ste naozaj chcete spojiť stoly. Ako chcete spálni sa počíta z jednej tabuľky, alebo iný, aj keď by ste vonkajšie tabuľky.

select p.*, coalesce(fp.bedroom_count, pu.bedroom_count) as bedroom_count
from properties p
left join floor_plans fp on p.property_type = 'APARTMENT_COMMUNITY' 
                         and fp.property_id = p.id
                         and fp.removed = false 
left join property_units pu on p.property_type <> 'APARTMENT_COMMUNITY' 
                            and pu.property_id = p.id
                            and pu.removed = false 
where p.id = 550
order by p.id;

Alebo použite UNION ALL:

select p.*, fp.bedroom_count
from properties p
join floor_plans fp on fp.property_id = p.id and fp.removed = false 
where p.id = 550
and p.property_type = 'APARTMENT_COMMUNITY'
union all
select p.*, pu.bedroom_count
from properties p
join property_units pu on pu.property_id = p.id and pu.removed = false 
where p.id = 550
and p.property_type <> 'APARTMENT_COMMUNITY'
order by p.id;

(Ak property_type môže byť null, tieto otázky budú potrebovať nejaké úpravy, aby sa s tým vysporiadať.)

2021-11-24 06:51:04
0
select  case 
            when p.property_type ='APARTMENT_COMMUNITY' 
                then (  
                    select  array_agg(distinct fp.bedroom_count) 
                    from    floor_plans fp 
                    where   fp.removed = false 
                    and     fp.property_id=p.id ) 
            else (
                    select  (array_agg(distinct pu.bedroom_count)) 
                    from    property_units pu 
                    where   pu.removed = false 
                    and pu.property_id=p.id ) 
        end 
from    properties p 
where   p.id =550

to je odpoveď na môj problém, v prípade, že sa niekto potrebuje

2021-11-24 07:43:36

V poriadku, tak to je skutočne súhrnom, ktoré ste hľadali. Nabudúce si položiť otázku, prosím, ukázať vzorky údajov a predpokladaný výsledok, tak sme pochopili, čo žiadate.
Thorsten Kettner

jo sorry ,toto je môj prvý krát )))) díky moc som sa
Grigor Martiros

Naučil / naučila som sa veľa od svojho odpoveď rovnako
Grigor Martiros

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................