首页新闻找找看学习计划

sql 语句的问题,关联表多条件查询。

0
悬赏园豆:20 [已解决问题] 解决于 2014-11-21 21:27

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来处理

sql
浪潮之巅的主页 浪潮之巅 | 初学一级 | 园豆:104
提问于:2014-11-21 14:22
< >
分享
最佳答案
0

为什么不用多个join处理? join处理方法很清爽的。

你可以把表重新设计一下,不能一个属性就设计一个表的。

收获园豆:10
Albert Fei | 老鸟四级 |园豆:2102 | 2014-11-21 15:53

http://www.cnblogs.com/leefreeman/p/4060227.html#!comments 我们的产品差不多也是这样的设计的

浪潮之巅 | 园豆:104 (初学一级) | 2014-11-21 16:37

我用的是linq那么如何才能动态的添加多个join?

浪潮之巅 | 园豆:104 (初学一级) | 2014-11-21 16:52

@浪潮之巅: linq还真不知道怎么处理

你可以用存储过程的

Albert Fei | 园豆:2102 (老鸟四级) | 2014-11-21 17:49
其他回答(3)
0

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='实木'

收获园豆:5
爱编程的大叔 | 园豆:30519 (高人七级) | 2014-11-21 14:28

这样查询出来的结果是不正确的,比如我有二个产品 a,b,

对应的属性值:a:红色+1*1.5+铁,b:红色+1*1.6+实木,那么用你这个查询的时候会把所有的都查询出来了

支持(0) 反对(0) 浪潮之巅 | 园豆:104 (初学一级) | 2014-11-21 14:34

@浪潮之巅: 那你想出现啥,请提供数据实例。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30519 (高人七级) | 2014-11-21 14:35

@爱编程的大叔: 我的要求是同时三个条件都满足时候才查出来,也许需要用到行转列了

支持(0) 反对(0) 浪潮之巅 | 园豆:104 (初学一级) | 2014-11-21 14:47
0

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='实木'

只会造轮子 | 园豆:2274 (老鸟四级) | 2014-11-21 14:37
0

实在这么复杂,创建个临时表吧,一个存储过程搞定

收获园豆:5
风醉 | 园豆:1197 (小虾三级) | 2014-11-21 14:56

临时表也不行啊,因为根本不知道有多少个属性字段,那个是动态的。。。。

支持(0) 反对(0) 浪潮之巅 | 园豆:104 (初学一级) | 2014-11-21 15:00

@浪潮之巅: 你这就是想求 颜色 尺寸 构造,这表设计的是有点问题,建议 PIVOT 行专列吧

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-11-21 15:07

@风醉: 主要是列有多少是未知,不知道怎么转

支持(0) 反对(0) 浪潮之巅 | 园豆:104 (初学一级) | 2014-11-21 15:30

@浪潮之巅: 看你linq写出来的,可以放在集合中做逻辑处理

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-11-21 17:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册