sql - Removing the union from a query and converted it into one query? -
i have been told remove union , change top half of query one, have been told easy cannot figure out. have been told include
where red (major colour) = red (silksname) blue (major colour) = blue (silksname) etc
select s.[silks_skey] [dbo].[silks] s inner join [dbo].[subcolour] sc on charindex(sc.[subcolour],s.[silksname]) <> 0 inner join [dbo].[majorcolour] mc on sc.[majorcolour] = mc.[majorcolour] union select s.[silks_skey], mc.[majorcolour_skey] [dbo].[silks] s inner join [dbo].[majorcolour] mc on charindex(mc.[majorcolour],s.[silksname]) <> 0 order s.[silks_skey]
i see no reason why should remove union all query, best option, although move union subquery:
select s.[silks_skey], c.[majorcolour_skey] [dbo].[silks] s inner join ( select [colour] = sc.[subcolour], mc.[majorcolour_skey] [dbo].[subcolour] sc inner join [dbo].[majorcolour] mc on sc.[majorcolour] = mc.[majorcolour] union select mc.[majorcolour], mc.[majorcolour_skey] [dbo].[majorcolour] mc ) c on charindex(c.[colour], s.[silksname]) <> 0 if have remove union use this:
select s.[silks_skey], mc.[majorcolour_skey] [dbo].[silks] s left join [dbo].[subcolour] sc on charindex(sc.[subcolour], s.[silksname]) <> 0 inner join [dbo].[majorcolour] mc on case when sc.subcolour not null , mc.majourcolour = sc.majourcolour 1 else charindex(mc.[majorcolour], s.[silksname]) <> 0 end <> 0 but cannot envisage performing better union.
note hve seen answer , opt case in join rather or, case statement shortcircuit when subcolour exists not evaluate second part, whereas or evaluate both.
Comments
Post a Comment