2017-02-20 24 views
0

に可能な組み合わせのリストを作成し、私はテーブル多くから多くの関係

Hotels Countries Regions Cities Hotel_Types

および/すべての関係が含まれているMappingsという名前の多くの関係テーブルには多くの設定を持っています

id, hotel_id, reference_type, reference_id, ... 
のような情報を含むマッピング reference_typeCountryRegionCityHotel_Typeなど と reference_id私は

Country_Name+Hotel_Type_Name 
Region_Name+Hotel_Type_Name 
City_Name+Hotel_Type_Name 
のすべての可能な組み合わせのリストを作成する必要が country_id又は city_id

ような前記エンティティのIDであってもよい

ホテルはどこにありますか。これはCountry_Name+Hotel_Type_Nameのユニークな組み合わせがリストされます

select name, hotel_type_name 
from (select c.country_name as name, h.hotel_type_name Mappings m inner join Countries c on m.reference_type='Country' and m.reference_id=c.country_id inner join hotel_Types h on m.reference_type='Hotel_type' and m.reference_id=h.hotel_type_id) union all 
    (select c.region_name as name, h.hotel_type_name Mappings m inner join Regions r on m.reference_type='Region' and m.reference_id=r.region_id inner join Hotel_Types h on m.reference_type='Hotel_type' and m.reference_id=h.hotel_type_id) union all 
    (select c.city_name as name, h.hotel_type_name Mappings m inner join Cities ci on m.reference_type='City' and m.reference_id=ci.city_id inner join Hotel_Types h on m.reference_type='Hotel_type' and m.reference_id=h.hotel_type_id) 

答えて

0

を組み合わせるために、私はここにいくつかのことを意味しているのですが、あなたは、内側行うことができますどのようにすべてのヘルプは、このように合流します

--link hotels to hotel_type 
with Hotel_Hotel_Types as (
    select h.hotel_id 
    ,ht.reference_id as hotel_types_id 
    from Hotels as h 
    inner join Mappings ht on ht.reference_type = 'Hotel_Type' and h.hotel_id = ht.hotel_id 
) 
--link hotels to Country_Name 
,Hotel_Country_Name as (
    select h.hotel_id 
    ,c.reference_id as countries_id 
    from Hotels as h 
    inner join Mappings c on c.reference_type = 'Country' and h.hotel_id = c.hotel_id 
) 
select distinct ht.*, c.* 
from Hotel_Hotel_Types hht 
    inner join Hotel_Types ht on ht.hotel_types_id = hht.hotel_types_id 
    inner join Hotel_Country_Name hc on hc.hotel_id = hht.hotel_id 
    inner join Countries c on с.countries_id = hc.countries_id 

Region_Name+Hotel_Type_NameCity_Name+Hotel_Type_Nameは同様のSQLを使用して照会することができます。

0

:私は別のテーブルから名前にアクセスすることができ、どのように彼らに