一个让我困惑的n:m关系的一个非常简单的例子。假设我们有两个表“Plant”和“Attribute”,另一个表与他们的ID保持关系:
Plant--------hasAttribute--------Attribute
P1 | A1
P1 | A2
P1 | A3
P2 | A1
P2 | A2
P3 | A2
P3 | A3
因此,工厂1具有属性1,2和3.工厂2具有属性1和2,工厂3具有属性2和3。 现在,在一个查询中,我如何获得例如所有具有属性2和3的植物? 结果应返回P1和P3,因为它们都具有属性2和3。 我正在尝试结合,但这也会给我P2作为结果......任何想法?
答案 0 :(得分:2)
答案 1 :(得分:1)
此查询结构避免了对distinct子句的需要(假设解析表中没有重复记录)。
SELECT p.PlantID
FROM
Plant p INNER JOIN PlantAttribute pa
ON p.PlantID = pa.PlantID AND pa.AttributeID = 1
INNER JOIN PlantAttribute pa2
ON p.PlantID = pa2.PlantID AND pa2.AttributeID = 2;
答案 2 :(得分:0)
select * from Plants p where 2 = (
select count(*) from HasPlants h
where h.pid = p.id and h.aid in ( a2, a3 )
)