我需要完美的mysql查询来获得我想要的结果

时间:2016-08-06 09:45:01

标签: mysql

我在http://sqlfiddle.com/#!9/b6015c6/2

创建了sql小提琴

我的表架构如下:

id  productid   attributeid
1   5   10
2   5   11
3   6   11
4   7   10

假设记录如下:

表:assignedattributeid

id  productname
5   P1000
6   P2000
7   P3000

表:产品

var res = {'test' : "tt" , 'right' : '22'}
        $.post('/test/${doc.id}',res,'application/json')

实际上我希望得到所有那些同时分配了属性10和11的产品。

  

我使用此查询:从左边的产品中选择不同的产品。*   在assignedattributeid.productid = products.id上加入assignedattributeid   其中assignedattributeid.attributeid在(10,11)

但它不起作用。它显示所有记录。实际上它应该只显示P1000产品。

查询中的任何建议?

2 个答案:

答案 0 :(得分:3)

按产品分组并添加HAVING条件,该条件计算唯一属性 - 它必须为2.

select products.* from  products
join assignedattributeid on assignedattributeid.productid=products.id
where assignedattributeid.attributeid in (10,11)
group by products.id
having count(distinct assignedattributeid.attributeid) = 2

http://sqlfiddle.com/#!9/b6015c6/11

或者按assignedattributeid

加入attributeid表格一次
select distinct products.* from  products
join assignedattributeid a1 on a1.productid=products.id
join assignedattributeid a2 on a2.productid=products.id
where a1.attributeid = 10
  and a2.attributeid = 11

http://sqlfiddle.com/#!9/b6015c6/8

如果products.id是主键,assignedattributeid(productid, attributeid)是唯一键,则不需要DISCTINCT关键字。

答案 1 :(得分:1)

试试这个

{{1}}