多对多关系查询只有属性已知

时间:2014-02-13 10:46:52

标签: mysql sql

我有3个表,TableA,TableB和TableAB(多对多表)。

参见下面表格AB的例子:

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

在此表中,我有来自TableA的id_attribute和来自TableB的id_product_attribute。

如果我想找出同时具有id_attributes 14和16的id_product_attribute,我应该怎么做?

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

在上面的示例中,只有product_attribute 18具有属性14和16.我的第一个查询将找出所有属性。我现在遇到的这个问题是确定它来自这个表的产品属性。<​​/ p>

感谢。

2 个答案:

答案 0 :(得分: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

这首先创建一个tableAB选择,只包含id_attribute 14.然后另一个选择只包含id 16.然后加入这两个只找到匹配。

答案 1 :(得分: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

相关问题