У меня есть пять таблиц, называемых Asset Master
, Category Master
, Asset Category
, Asset Parameter
и Parameter Master
.
У меня более 50 параметров в таблице Parameter Master
, каждое значение параметра хранится в таблице Asset Parameter
согласно активу.
Каждому активу назначается более одной категории, поэтому существует одна таблица с именем Asset Category
, которая является средней таблицей для Category Master
и Asset Master
.
Теперь я хочу, чтобы значение 50 параметров, а также информация category
и asset
в одном запросе были записаны ниже.
Этот запрос дает результат идеально, но его нужно оптимизировать. Кто-нибудь предложит мне правильный способ его оптимизации.
Я использую левое соединение, потому что тип значения параметра - это текст в дБ, и ему нужно обрабатывать нулевое значение.
SELECT [ac].[CategoryID]
,[am].[AssetID]
,[am].[FullAssetID]
,[am].[AssetTitle]
,[am].[SmallDescription]
,[am].[LongDescription]
,[am].[Paneltype]
,[am].[Image]
,[am].[ThumbImage]
,[am].[CreatedDate]
,[am].[ModifiedDate]
,[am].[Status]
,[cm].[CategoryName]
,[cm].[Description]
,[cm].[ParentCategoryID]
,[ap].[ParameterValue] AS 'Longitude'
,[ap1].[ParameterValue] AS 'Latitude'
,[ap2].[ParameterValue] AS 'Address'
,[ap3].[ParameterValue] AS 'Address1'
,[ap4].[ParameterValue] AS 'Address2'
,[ap5].[ParameterValue] AS 'Address3'
,[ap6].[ParameterValue] AS 'Address4'
,[ap7].[ParameterValue] AS 'Telephone'
,[ap8].[ParameterValue] AS 'Email'
,[ap9].[ParameterValue] AS 'Website'
,[ap10].[ParameterValue] AS 'Postcode'
,[ap11].[ParameterValue] AS 'Url'
,[ap12].[ParameterValue] AS 'OpeningTimes'
,[ap13].[ParameterValue] AS 'OpeningDates'
,[ap14].[ParameterValue] AS 'PriceMin'
,[ap15].[ParameterValue] AS 'PriceMax'
,[ap16].[ParameterValue] AS 'BookOnline'
,[ap17].[ParameterValue] AS 'BookOnlineUrl'
,[ap18].[ParameterValue] AS 'CheckIn'
,[ap19].[ParameterValue] AS 'CheckOut'
,[ap20].[ParameterValue] AS 'StartDate'
,[ap21].[ParameterValue] AS 'EndDate'
,[ap22].[ParameterValue] AS 'Seasons'
,[ap23].[ParameterValue] AS 'Months'
,[ap24].[ParameterValue] AS 'Sleeps'
,[ap25].[ParameterValue] AS 'WiFi'
,[ap26].[ParameterValue] AS 'Creditcards'
,[ap27].[ParameterValue] AS 'PetsWelcome'
,[ap28].[ParameterValue] AS 'DisabledAccess'
,[ap29].[ParameterValue] AS 'DisabledDescription'
,[ap30].[ParameterValue] AS 'LicensedRestaurant'
,[ap31].[ParameterValue] AS 'NoRestaurantEveningMealsAvailable'
,[ap32].[ParameterValue] AS 'LaundryFacilities'
,[ap33].[ParameterValue] AS 'DryingFacilities'
,[ap34].[ParameterValue] AS 'Television'
,[ap35].[ParameterValue] AS 'Lounge'
,[ap36].[ParameterValue] AS 'PayParking'
,[ap37].[ParameterValue] AS 'FreeParking'
,[ap38].[ParameterValue] AS 'WashingMachine'
,[ap39].[ParameterValue] AS 'Dishwasher'
,[ap40].[ParameterValue] AS 'Microwave'
,[ap41].[ParameterValue] AS 'CDPlayerss'
,[ap42].[ParameterValue] AS 'Video'
,[ap43].[ParameterValue] AS 'Shower'
,[ap44].[ParameterValue] AS 'Bath'
,[ap45].[ParameterValue] AS 'BathWithShower'
,[ap46].[ParameterValue] AS 'DVDPlayer'
,[ap47].[ParameterValue] AS 'CotAvailable'
,[ap48].[ParameterValue] AS 'ElectricHookup'
,[ap49].[ParameterValue] AS 'Shop'
,[ap50].[ParameterValue] AS 'ChemicalDisposal'
,[ap51].[ParameterValue] AS 'StarRating'
,[ap52].[ParameterValue] AS 'FoodCategory'
FROM [AssetMaster] AS am
INNER JOIN [Asset_Category] AS ac ON [am].AssetID = [ac].AssetID
INNER JOIN [CategoryMaster] AS cm ON [cm].[CategoryID]=[am].[CategoryID]
LEFT JOIN
( [AssetParameter] AS ap
INNER JOIN [ParameterMaster] AS pm ON [pm].[ParameterID] = [ap].[ParameterID] AND [pm].[ParameterName]='Longitude'
) ON [am].[AssetID] = [ap].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap1
INNER JOIN [ParameterMaster] AS pm1 ON [pm1].[ParameterID] = [ap1].[ParameterID] AND [pm1].[ParameterName]='Latitude'
) ON [am].[AssetID] = [ap1].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap2
INNER JOIN [ParameterMaster] AS pm2 ON [pm2].[ParameterID] = [ap2].[ParameterID] AND [pm2].[ParameterName]='Address'
) ON [am].[AssetID] = [ap2].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap3
INNER JOIN [ParameterMaster] AS pm3 ON [pm3].[ParameterID] = [ap3].[ParameterID] AND [pm3].[ParameterName]='Address1'
) ON [am].[AssetID] = [ap3].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap4
INNER JOIN [ParameterMaster] AS pm4 ON [pm4].[ParameterID] = [ap4].[ParameterID] AND [pm4].[ParameterName]='Address2'
) ON [am].[AssetID] = [ap4].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap5
INNER JOIN [ParameterMaster] AS pm5 ON [pm5].[ParameterID] = [ap5].[ParameterID] AND [pm5].[ParameterName]='Address3'
) ON [am].[AssetID] = [ap5].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap6
INNER JOIN [ParameterMaster] AS pm6 ON [pm6].[ParameterID] = [ap6].[ParameterID] AND [pm6].[ParameterName]='Address4'
) ON [am].[AssetID] = [ap6].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap7
INNER JOIN [ParameterMaster] AS pm7 ON [pm7].[ParameterID] = [ap7].[ParameterID] AND [pm7].[ParameterName]='Telephone'
) ON [am].[AssetID] = [ap7].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap8
INNER JOIN [ParameterMaster] AS pm8 ON [pm8].[ParameterID] = [ap8].[ParameterID] AND [pm8].[ParameterName]='Email'
) ON [am].[AssetID] = [ap8].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap9
INNER JOIN [ParameterMaster] AS pm9 ON [pm9].[ParameterID] = [ap9].[ParameterID] AND [pm9].[ParameterName]='Website'
) ON [am].[AssetID] = [ap9].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap10
INNER JOIN [ParameterMaster] AS pm10 ON [pm10].[ParameterID] = [ap10].[ParameterID] AND [pm10].[ParameterName]='Postcode'
) ON [am].[AssetID] = [ap10].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap11
INNER JOIN [ParameterMaster] AS pm11 ON [pm11].[ParameterID] = [ap11].[ParameterID] AND [pm11].[ParameterName]='Url'
) ON [am].[AssetID] = [ap11].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap12
INNER JOIN [ParameterMaster] AS pm12 ON [pm12].[ParameterID] = [ap12].[ParameterID] AND [pm12].[ParameterName]='Opening Time'
) ON [am].[AssetID] = [ap12].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap13
INNER JOIN [ParameterMaster] AS pm13 ON [pm13].[ParameterID] = [ap13].[ParameterID] AND [pm13].[ParameterName]='Opening Dates'
) ON [am].[AssetID] = [ap13].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap14
INNER JOIN [ParameterMaster] AS pm14 ON [pm14].[ParameterID] = [ap14].[ParameterID] AND [pm14].[ParameterName]='Price Min'
) ON [am].[AssetID] = [ap14].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap15
INNER JOIN [ParameterMaster] AS pm15 ON [pm15].[ParameterID] = [ap15].[ParameterID] AND [pm15].[ParameterName]='Price Max'
) ON [am].[AssetID] = [ap15].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap16
INNER JOIN [ParameterMaster] AS pm16 ON [pm16].[ParameterID] = [ap16].[ParameterID] AND [pm16].[ParameterName]='Book Online'
) ON [am].[AssetID] = [ap16].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap17
INNER JOIN [ParameterMaster] AS pm17 ON [pm17].[ParameterID] = [ap17].[ParameterID] AND [pm17].[ParameterName]='Book Online Url'
) ON [am].[AssetID] = [ap17].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap18
INNER JOIN [ParameterMaster] AS pm18 ON [pm18].[ParameterID] = [ap18].[ParameterID] AND [pm18].[ParameterName]='Check In'
) ON [am].[AssetID] = [ap18].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap19
INNER JOIN [ParameterMaster] AS pm19 ON [pm19].[ParameterID] = [ap19].[ParameterID] AND [pm19].[ParameterName]='Check Out'
) ON [am].[AssetID] = [ap19].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap20
INNER JOIN [ParameterMaster] AS pm20 ON [pm20].[ParameterID] = [ap20].[ParameterID] AND [pm20].[ParameterName]='Date Start Date'
) ON [am].[AssetID] = [ap20].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap21
INNER JOIN [ParameterMaster] AS pm21 ON [pm21].[ParameterID] = [ap21].[ParameterID] AND [pm21].[ParameterName]='Date End Date'
) ON [am].[AssetID] = [ap21].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap22
INNER JOIN [ParameterMaster] AS pm22 ON [pm22].[ParameterID] = [ap22].[ParameterID] AND [pm22].[ParameterName]='Season'
) ON [am].[AssetID] = [ap22].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap23
INNER JOIN [ParameterMaster] AS pm23 ON [pm23].[ParameterID] = [ap23].[ParameterID] AND [pm23].[ParameterName]='Months'
) ON [am].[AssetID] = [ap23].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap24
INNER JOIN [ParameterMaster] AS pm24 ON [pm24].[ParameterID] = [ap24].[ParameterID] AND [pm24].[ParameterName]='Sleeps'
) ON [am].[AssetID] = [ap24].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap25
INNER JOIN [ParameterMaster] AS pm25 ON [pm25].[ParameterID] = [ap25].[ParameterID] AND [pm25].[ParameterName]='WiFi'
) ON [am].[AssetID] = [ap25].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap26
INNER JOIN [ParameterMaster] AS pm26 ON [pm26].[ParameterID] = [ap26].[ParameterID] AND [pm26].[ParameterName]='Creditcards'
) ON [am].[AssetID] = [ap26].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap27
INNER JOIN [ParameterMaster] AS pm27 ON [pm27].[ParameterID] = [ap27].[ParameterID] AND [pm27].[ParameterName]='Pets Welcome'
) ON [am].[AssetID] = [ap27].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap28
INNER JOIN [ParameterMaster] AS pm28 ON [pm28].[ParameterID] = [ap28].[ParameterID] AND [pm28].[ParameterName]='Disabled Access'
) ON [am].[AssetID] = [ap28].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap29
INNER JOIN [ParameterMaster] AS pm29 ON [pm29].[ParameterID] = [ap29].[ParameterID] AND [pm29].[ParameterName]='Disabled Description'
) ON [am].[AssetID] = [ap29].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap30
INNER JOIN [ParameterMaster] AS pm30 ON [pm30].[ParameterID] = [ap30].[ParameterID] AND [pm30].[ParameterName]='Licensed Restaurant'
) ON [am].[AssetID] = [ap30].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap31
INNER JOIN [ParameterMaster] AS pm31 ON [pm31].[ParameterID] = [ap31].[ParameterID] AND [pm31].[ParameterName]='No Restaurant Evening Meals Availbale'
) ON [am].[AssetID] = [ap31].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap32
INNER JOIN [ParameterMaster] AS pm32 ON [pm32].[ParameterID] = [ap32].[ParameterID] AND [pm32].[ParameterName]='Laundry Facilites'
) ON [am].[AssetID] = [ap32].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap33
INNER JOIN [ParameterMaster] AS pm33 ON [pm33].[ParameterID] = [ap33].[ParameterID] AND [pm33].[ParameterName]='Drying Facilities'
) ON [am].[AssetID] = [ap33].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap34
INNER JOIN [ParameterMaster] AS pm34 ON [pm34].[ParameterID] = [ap34].[ParameterID] AND [pm34].[ParameterName]='Television'
) ON [am].[AssetID] = [ap34].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap35
INNER JOIN [ParameterMaster] AS pm35 ON [pm35].[ParameterID] = [ap35].[ParameterID] AND [pm35].[ParameterName]='Lounge'
) ON [am].[AssetID] = [ap35].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap36
INNER JOIN [ParameterMaster] AS pm36 ON [pm36].[ParameterID] = [ap36].[ParameterID] AND [pm36].[ParameterName]='Pay Parking'
) ON [am].[AssetID] = [ap36].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap37
INNER JOIN [ParameterMaster] AS pm37 ON [pm37].[ParameterID] = [ap37].[ParameterID] AND [pm37].[ParameterName]='Free Parking'
) ON [am].[AssetID] = [ap37].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap38
INNER JOIN [ParameterMaster] AS pm38 ON [pm38].[ParameterID] = [ap38].[ParameterID] AND [pm38].[ParameterName]='Washing Machine'
) ON [am].[AssetID] = [ap38].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap39
INNER JOIN [ParameterMaster] AS pm39 ON [pm39].[ParameterID] = [ap39].[ParameterID] AND [pm39].[ParameterName]='Dishwasher'
) ON [am].[AssetID] = [ap39].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap40
INNER JOIN [ParameterMaster] AS pm40 ON [pm40].[ParameterID] = [ap40].[ParameterID] AND [pm40].[ParameterName]='Microwave'
) ON [am].[AssetID] = [ap40].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap41
INNER JOIN [ParameterMaster] AS pm41 ON [pm41].[ParameterID] = [ap41].[ParameterID] AND [pm41].[ParameterName]='CD Player'
) ON [am].[AssetID] = [ap41].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap42
INNER JOIN [ParameterMaster] AS pm42 ON [pm42].[ParameterID] = [ap42].[ParameterID] AND [pm42].[ParameterName]='Video'
) ON [am].[AssetID] = [ap42].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap43
INNER JOIN [ParameterMaster] AS pm43 ON [pm43].[ParameterID] = [ap43].[ParameterID] AND [pm43].[ParameterName]='Shower'
) ON [am].[AssetID] = [ap43].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap44
INNER JOIN [ParameterMaster] AS pm44 ON [pm44].[ParameterID] = [ap44].[ParameterID] AND [pm44].[ParameterName]='Bath'
) ON [am].[AssetID] = [ap44].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap45
INNER JOIN [ParameterMaster] AS pm45 ON [pm45].[ParameterID] = [ap45].[ParameterID] AND [pm45].[ParameterName]='Bath With Shower'
) ON [am].[AssetID] = [ap45].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap46
INNER JOIN [ParameterMaster] AS pm46 ON [pm46].[ParameterID] = [ap46].[ParameterID] AND [pm46].[ParameterName]='DVD Player'
) ON [am].[AssetID] = [ap46].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap47
INNER JOIN [ParameterMaster] AS pm47 ON [pm47].[ParameterID] = [ap47].[ParameterID] AND [pm47].[ParameterName]='Cot Available'
) ON [am].[AssetID] = [ap47].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap48
INNER JOIN [ParameterMaster] AS pm48 ON [pm48].[ParameterID] = [ap48].[ParameterID] AND [pm48].[ParameterName]='Electric Hook Up'
) ON [am].[AssetID] = [ap48].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap49
INNER JOIN [ParameterMaster] AS pm49 ON [pm49].[ParameterID] = [ap49].[ParameterID] AND [pm49].[ParameterName]='Shop'
) ON [am].[AssetID] = [ap49].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap50
INNER JOIN [ParameterMaster] AS pm50 ON [pm50].[ParameterID] = [ap50].[ParameterID] AND [pm50].[ParameterName]='Chemical Disposal'
) ON [am].[AssetID] = [ap50].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap51
INNER JOIN [ParameterMaster] AS pm51 ON [pm51].[ParameterID] = [ap51].[ParameterID] AND [pm51].[ParameterName]='Star Rating'
) ON [am].[AssetID] = [ap51].[AssetID]
LEFT JOIN
( [AssetParameter] AS ap52
INNER JOIN [ParameterMaster] AS pm52 ON [pm52].[ParameterID] = [ap52].[ParameterID] AND [pm52].[ParameterName]='Food Category'
) ON [am].[AssetID] = [ap52].[AssetID]
Order By [cm].[CategoryID], [am].[AssetTitle], [am].[ModifiedDate] DESC