2014-02-13 28 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'不需要。 –