各広告の詳細をプロパティ/値スタイルで保存するためにAds
呼び出されるテーブルと別のテーブルAdDetails
があります。ダミーコードを使用した簡略化された例を次に示します。
[AdDetailID], [AdID], [PropertyName], [PropertyValue]
2 28 Color Red
3 28 Speed 100
4 27 Color Red
5 28 Fuel Petrol
6 27 Speed 70
Ads
PropertyNameとPropertyValueの多くの組み合わせに一致するものを選択する方法。例:
where PropertyName='Color' and PropertyValue='Red'
And
where PropertyName='Speed' and CAST(PropertyValue AS INT) > 60
あなたはおそらくこのようなことをたくさんするつもりなので、私はすべてのプロパティを単一の行に折りたたむビューを作成することから始めます。
create view vDetail
as
select AdID,
max(case PropertyName
when 'Color' then PropertyValue end) as Color,
cast(max(case PropertyName
when 'Speed' then PropertyValue end) as Int) as Speed,
max(case PropertyName
when 'Fuel' then PropertyValue end) as Fuel
from AdDetails
group by AdID
このアプローチは、Speedをintにキャストする際の問題も解決します。
それなら私が select * from vDetails
これにより、親テーブルに結合されたときに簡単に処理できます。可変数の「一致」が必要だとおっしゃいましたが、以下のwhere句に注意してください。@MatchesNeededは、nullではなかった変数の数のカウントになります。
select *
from Ads a
inner join vDetails v
on a.AdID = v.AdID
where case when v.Color = @Color then 1 else 0 end +
case when v.Spead > @Speed then 1 else 0 end +
case when v.Fuel = @Fuel then 1 else 0 end = @MatchesNeeded
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加