select f.* from Products f
join ProductAttributeValues fav on fav.ProductId=f.Id
join ProductAttributeValues fav1 on fav1.ProductId=f.Id
join ProductAttributeValues fav2 on fav2.ProductId=f.Id
where fav.ProductAttributeValue='红色'
and fav1.ProductAttributeValue='1*1.2'
and fav2.ProductAttributeValue='实木'
能不能改成不用多个join来处理
为什么不用多个join处理? join处理方法很清爽的。
你可以把表重新设计一下,不能一个属性就设计一个表的。
http://www.cnblogs.com/leefreeman/p/4060227.html#!comments 我们的产品差不多也是这样的设计的
我用的是linq那么如何才能动态的添加多个join?
@浪潮之巅: linq还真不知道怎么处理
你可以用存储过程的
select f.* from Products f
join ProductAttributeValues fav on fav.ProductId=f.Id
where fav.ProductAttributeValue='红色' or fav.ProductAttributeValue='1*1.2' or fav.ProductAttributeValue='实木'
这样查询出来的结果是不正确的,比如我有二个产品 a,b,
对应的属性值:a:红色+1*1.5+铁,b:红色+1*1.6+实木,那么用你这个查询的时候会把所有的都查询出来了
@浪潮之巅: 那你想出现啥,请提供数据实例。
@爱编程的大叔: 我的要求是同时三个条件都满足时候才查出来,也许需要用到行转列了
select f.* from Products f,ProductAttributeValues fav,ProductAttributeValues fav1,ProductAttributeValues fav2
where
fav.ProductId=f.Id and fav1.ProductId=f.Id and fav2.ProductId=f.Id and
fav.ProductAttributeValue='红色'
and fav1.ProductAttributeValue='1*1.2'
and fav2.ProductAttributeValue='实木'
实在这么复杂,创建个临时表吧,一个存储过程搞定
临时表也不行啊,因为根本不知道有多少个属性字段,那个是动态的。。。。
@浪潮之巅: 你这就是想求 颜色 尺寸 构造,这表设计的是有点问题,建议 PIVOT 行专列吧
@风醉: 主要是列有多少是未知,不知道怎么转
@浪潮之巅: 看你linq写出来的,可以放在集合中做逻辑处理