我有两张桌子,为简单起见,我将以一个简单的问题来说明。
产品表包含具有两列的产品定义
Product ID -- Product Name
“产品详细信息”表包含存储为垂直或扩展属性的产品详细信息
Product Detail ID -- Product Number -- Key ID -- Value ID
假设我有两个其他参考表,其中一个用于键,另一个用于值。
按键表
1 -- Price
2 -- Color
价值表
1 -- Red
2 -- Blue
3 -- 10 $
4 -- 20$
我使用“产品详细信息”表作为垂直表,为产品添加任意数量的属性。
现在来搜索记录!
例如,我需要获取“ALL”Product Details列匹配的所有产品。
我有以下数据
产品表数据
Prod#1 XXX
Prod#2 YYY
产品详情表数据
1 Prod#1 1 4
2 Prod#1 2 1
第1行:产品1的Price键值为20 $ 第2行:产品1具有颜色键,值为红色
现在需要执行以下查询:
1- Get Products with Key "Price" having a price > 10$
2- Get Products with a Key "Price" > 10 AND "Color" is Red
在单个查询中,这在TSQL中是否可行?
由于
答案 0 :(得分: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'
答案 1 :(得分: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
问题是必须定义Values表的数据类型,Value字段。如果您选择字符串,那么如果要将其与整数值进行比较,则必须将其强制转换为整数。