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
Post a Comment