旧式:
Select i.*,
max(decode(prop.PROPERTY_ID,1,prop.VALUE,NULL)) as PROPERTY_ONE,
max(decode(prop.PROPERTY_ID,2,prop.VALUE,NULL)) as PROPERTY_TWO
From ITEM i
Left Join ITEM_PROPERTY prop on i.ITEM_ID = prop.ITEM_D and prop.PROPERTY_ID in(1,2)
group by there_will_have_to_list_all_the_fields_from_ITEM
或者(“轻量级”版本,gorup by 中的列表较少。但优化可能有问题):
Select i.*,prop.PROPERTY_ONE,prop.PROPERTY_TWO
From ITEM i
Left Join (
select ITEM_ID,
max(decode(PROPERTY_ID,1,VALUE,NULL)) as PROPERTY_ONE,
max(decode(PROPERTY_ID,2,VALUE,NULL)) as PROPERTY_TWO
from ITEM_PROPERTY
where PROPERTY_ID in(1,2)
group by ITEM_ID
) prop on i.ITEM_ID = prop.ITEM_D
新样式(Oracle 11g+):
select * from (
Select i.*, prop.PROPERTY_ID, prop1.VALUE
From ITEM i
Left Join ITEM_PROPERTY prop on i.ITEM_ID = prop.ITEM_D and prop.PROPERTY_ID in(1,2)
)
pivot(
max(VALUE) for PROPERTY_ID in(1 as "PROPERTY_ONE",2 as "PROPERTY_TWO")
)