sql - Multiple joins to same table -


i have set of tables , data

create table item (       id int primary key,       name varchar   );   create table property (       id int primary key,       name varchar   );   create table value (       id int primary key,       value varchar   );   create table item_value (       item int not null references item(id),       property int not null references property(id),       value int not null references value(id)   );   insert item (id, name) values (1, 'item1'), (2, 'item2');   insert property (id, name) values (1, 'prop1'), (2, 'prop2');   insert value (id, value) values (1, 'val1'), (2, 'val2');   insert item_value (item, property, value) values (1, 1, 1), (2,2,2 );   

i want result set:

name    value_1    value_2 ---------------------------   item1   val1       <null> item2   <null>     val2 

and use query:

select i.name name, v1.value value_1, v2.value value_2  item left join item_value iv on iv.item = i.id left join value v1 on v1.id = iv.value , v1.id = (   select v.id value v    join property p on p.id = iv.property      , p.name = 'prop1' , v.id = v1.id , v.id = iv.value ) left join value v2 on v2.id = iv.value , v2.id = (   select v.id value v    join property p on p.id = iv.property      , p.name = 'prop2' , v.id = v2.id , v.id = iv.value ) 

the question is: how can avoid nested selects?
i'm using postgresql

you can try with

select i.name name, v1.value value_1, v2.value value_2    item        inner join item_value iv on iv.item = i.id        inner join property p on iv.property = p.id        left join value v1 on p.name = 'prop1' , v1.id = iv.value        left join value v2 on p.name = 'prop2' , v2.id = iv.value 

Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -