2014-02-13 15 views
0

我有3个表,TableA,TableB和TableAB(多对多表)。多对多关系查询只有属性已知

见TableAB的例子如下:

TableAB 

id_attribute | id_product_attribute 
14 | 18 
14 | 19 
16 | 10 
16 | 12 
16 | 16 
16 | 18 
16 | 20 
16 | 22 
16 | 24 
16 | 26 

在这个表,我有id_attribute从表B表A和id_product_attribute。

如果我想知道id_product_attribute有id_attributes 14和16,我该怎么做?

本质上,我有一个id_attributes的组合,我正在寻找一个特定的id_product_attribute包含所有这些。

在上面的示例中,只有product_attribute 18具有属性14和16.我的第一个查询将查找所有属性。我现在遇到的这个问题是从这张表中确定哪个产品属性。

谢谢。

+0

这看起来相关:http://stackoverflow.com/questions/8070927/mysql-many-to-many-select –

回答

0
select 
    count(ab1.id_product_attribute),ab1.id_product_attribute,ab1.id_attribute 
from ab ab1 
join ab ab2 
on ab1.id_product_attribute = ab2.id_product_attribute 
where ab1.id_attribute in (14,16) 
and ab2.id_attribute in (14,16) 
group by ab1.id_product_attribute,ab1.id_attribute 
having count(ab1.id_product_attribute) > 1; 

SQL小提琴:http://sqlfiddle.com/#!2/007eb/13

1

您想自联接。

select distinct ab1.id_product_attribute 
from tableAB ab1 
join tableAB ab2 on ab1.id_product_attribute = ab2.id_product_attribute 
where ab1.id_attribute = 14 
and ab2.id_attribute = 16 

这首先创建仅包含id_attribute 14.然后,将包含唯一ID 16。然后加入这两个才发现匹配另一个选择的选择tableAB的。

+0

如果在'TableAB(id_attribute,id_product_attribute)'上有'UNIQUE'约束,那么' DISTINCT'不需要。 –