与えられた2つのテーブル:
'people'テーブルには、次の列が含まれています。
name
favorite_walking_shoe
favorite_running_shoe
favorite_dress_shoe
favorite_house_shoe
favorite_other_shoe
'shoes'テーブルには、次の列が含まれています。
shoe
name
description
以下を含む結果セットを作成したい:
people.name, people.favorite_shoe_type, shoes.name, shoes.description
私は次のようなものを使用して望ましい結果を得ることができることを知っています:
select p.name, p.favorite_shoe_type, s.name, s.description
from (select name, favorite_walking_shoe as shoe, 'walking' as favorite_shoe_type
from people where favorite_walking_shoe is not null
union all
select name, favorite_running_shoe, 'running'
from people where favorite_running_shoe is not null
union all
select name, favorite_dress_shoe, 'dress'
from people where favorite_dress_shoe not is null
union all
select name, favorite_house_shoe, 'house'
from people where favorite_house_shoe not is null
union all
select name, favorite_other_shoe, 'other'
from people where favorite_other_shoe not is null
) p
join shoes s on s.shoe = p.shoe
order by 1,2
ただし、これには「人」テーブルの5パスが必要です。複数のパスを必要とせずにUNIONALLを達成する方法はありますか?
構造は、変更できないベンダー製品の一部であることを指摘しておく必要があります。:(