多对多关系多表连接查询,同一个字段同时满足多个条件

rickmei 2014-07-31 08:11:24
分类表 t_keytype 商品表 t_product 分类商品关联表 t_typeproduct

tid(分类ID) name (分类名称) pid(商品ID) name (商品名称) id pid (商品ID) tid(分类ID)
1 分类1 1 商品1 1 1 1
2 分类2 2 商品2 2 1 2
3 2 1
4 2 2


现在要表连接查询,根据分类ID字段同时满足多个条件 的商品”(分类id=1 and 分类id=2 )“ 查询是同一个字段多个and,请问改怎么写,尽量不要子查询因为数据量比较大,在此谢谢各位啦!
...全文
4606 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
具体代码不给你写了,自己学习 sql 规范。 这是两个关系运算: t_keytype inner join t_typeproduct on ...... inner join t_product on ..... where t_keytype.name in [.....]
dongshanyu 2014-08-01
  • 打赏
  • 举报
回复
> ivan10038055 前面的SQL写的是有问题,抱歉,现做修正如下,看是否满足你的要求: select a.pid,b.name from ( select a.pid from ( select distinct a.pid from t_typeproduct a where 1 = 1 and a.tid = '1' ) a inner join ( select distinct a.pid from t_typeproduct a where 1 = 1 and a.tid = '2' ) b on (a.pid = b.pid) where 1 = 1 ) a inner join t_product b on (a.pid = b.pid) where 1 = 1
rickmei 2014-08-01
  • 打赏
  • 举报
回复
引用 10 楼 Z65443344 的回复:
说的再详细点: 你只知道电脑1有厂商,CPU核数和网络模式 电脑2也有厂商,CPU核数和网络模式 那到底都有哪些厂商,核数又分为几种,网络模式都是什么 你根本没有数据,如何根据这些查询?
前面说了,是多多多的关系,一个物品,一个商品包含多个属性。 类似上图和表,只问怎么查,是维护项目,原先的表就是这样设计的,话说回来按照你的这个思路是有多少属性分类就建立多少分类字段,这种不可取,万一要添加分类属性呢,难不成我还得再加一个字段????
於黾 2014-08-01
  • 打赏
  • 举报
回复
说的再详细点: 你只知道电脑1有厂商,CPU核数和网络模式 电脑2也有厂商,CPU核数和网络模式 那到底都有哪些厂商,核数又分为几种,网络模式都是什么 你根本没有数据,如何根据这些查询?
於黾 2014-08-01
  • 打赏
  • 举报
回复
根据你的图,你电脑的所有属性都应该单独分配一个字段存放,然后根据字段查询 或者分类表下再建立子表(外键关联) 你现在只有一个商品表和一个分类表,那个关联表基本不起作用 从关联表上只能看到商品有哪些属性,而这些属性数据库中根本没有
於黾 2014-08-01
  • 打赏
  • 举报
回复
分类id=1 and 分类id=2 同一个字段怎么可能既是1,又是2,当然查不出来 你想让一个物品有多个分类,那得加字段啊 比如 分类id1=1 and 分类id2=2
rickmei 2014-08-01
  • 打赏
  • 举报
回复
引用 6 楼 dongshanyu 的回复:
1.若根据[类编码]进行检索的话: select a.name from t_product a inner join t_typeproduct b on (a.pid = b.pid) where 1 = 1 and b.tid = '1' and b.tid = '2' ....... 2.若使用[类型名称]进行检索 select a.name from t_product a inner join t_typeproduct b on (a.pid = b.pid) inner join t_keytype t1 on (b.tid = t1.tid) inner join t_keytype t2 on (b.tid = t2.tid) ...... where 1 = 1 and t1.name = '高通' and t2.name = '双核' .......
第一种根据类编码查不出来的
dongshanyu 2014-08-01
  • 打赏
  • 举报
回复
1.若根据[类编码]进行检索的话: select a.name from t_product a inner join t_typeproduct b on (a.pid = b.pid) where 1 = 1 and b.tid = '1' and b.tid = '2' ....... 2.若使用[类型名称]进行检索 select a.name from t_product a inner join t_typeproduct b on (a.pid = b.pid) inner join t_keytype t1 on (b.tid = t1.tid) inner join t_keytype t2 on (b.tid = t2.tid) ...... where 1 = 1 and t1.name = '高通' and t2.name = '双核' .......
rickmei 2014-08-01
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
具体代码不给你写了,自己学习 sql 规范。 这是两个关系运算: t_keytype inner join t_typeproduct on ...... inner join t_product on ..... where t_keytype.name in [.....]
可能你误解我的意思了 不要in 如果in的话只要满足一个条件的数据全都出来了,我的意思是一个类型ID同时满足多个条件的数据,现在有两个产品,每个产品都有两个分类(分类1和分类2) ,商品必须满有这两个分类的数据,就是“分类id=1 and 分类id=2” 是这样的并且关系,但是这样写查不出来。
rickmei 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 ivan10038055 的回复:
网了发图,如下图不是或者的关系 是并且的关系
可能你误解我的意思了 不要in 如果in的话只要满足一个条件的数据全都出来了,我的意思是一个类型ID同时满足多个条件的数据,现在有两个产品,每个产品都有两个分类(分类1和分类2) ,商品必须满有这两个分类的数据,就是“分类id=1 and 分类id=2” 是这样的并且关系,但是这样写查不出来。
淡淡的活着 2014-08-01
  • 打赏
  • 举报
回复
inner join 啊··关联查询不是一直用到的么··
rickmei 2014-07-31
  • 打赏
  • 举报
回复
网了发图,如下图不是或者的关系 是并且的关系

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧