0

簡単にするために、簡単な質問で説明します。

Product テーブルには、2 つの列を持つ製品定義が含まれています

Product ID -- Product Name

製品の詳細テーブルには、垂直または拡張プロパティとして保存された製品の詳細が含まれています

Product Detail ID -- Product Number -- Key ID -- Value ID

他に 2 つの参照テーブルがあると仮定すると、そのうちの 1 つはキー用で、もう 1 つは値用です。

キー テーブル

1 -- Price
2 -- Color

値テーブル

1 -- Red
2 -- Blue
3 -- 10 $
4 -- 20$

Product Details テーブルを垂直テーブルとして使用して、製品に必要な数のプロパティを追加しています。

さあ、レコード探しだ!

たとえば、「すべて」の製品詳細列が一致するすべての製品を取得する必要があります。

私は次のデータを持っています

製品表データ

Prod#1   XXX
Prod#2   YYY

商品詳細表データ

1  Prod#1  1  4
2  Prod#1  2  1

行 #1: 値が 20$ の Price キーを持つ製品 1 行 #2: 値が Red の Color キーを持つ製品 1

ここで、次のクエリを実行する必要があります。

1- Get Products with Key "Price" having a price > 10$
2- Get Products with a Key "Price" > 10 AND "Color" is Red

これは、単一のクエリで TSQL で実行できますか?

ありがとう

4

2 に答える 2

0

このようなもの:

select
  distinct p.product_id
from
  products p
  inner join product_details pd_price on p.product_id = pd_price.product_id
  inner join keys as k_price on pd_price.key_id = k_price.key_id
  inner join values as v_price on pd_price.value_id = v_price.value_id
  inner join product_details pd_color on p.product_id = pd_color.product_id
  inner join keys as k_color on pd_color.key_id = k_color.key_id
  inner join values as v_color on pd_color.value_id = v_color.value_id
where
  k_price.name = 'Price' and v_price.value > 10 and
  k_color.name = 'Color' and v_color.value = 'Red'
于 2012-08-21T12:09:28.320 に答える
0

次のような 1 つのクエリだけでジョブを実行できます。

SELECT Products.ProductId, Products.ProductName FROM Products
INNER JOIN ProductDetails ON Products.ProductId = ProductDetails.ProductId
INNER JOIN Keys ON ProductDetails.KeyId = Keys.Id
INNER JOIN Values ON ProductDetails.ValueId = Values.Id
WHERE Keys.Name = 'Price' AND Values.Value > @Value

問題は、値テーブルのデータ型、値フィールドを定義する必要があることです。文字列を選択した場合、整数値と比較するには、整数にキャストする必要があります。

于 2012-08-21T12:11:05.080 に答える