我有两个表,Data(Name, dataID)Attributes(Name, attributeID, dataID)具有一对多关系。一个dataID可能与许多attributeID关联。

我想做的是运行一个查询,该查询查找具有特定属性ID集的所有dataID。我不能:

SELECT dataID
FROM Attributes
WHERE dataID = 1 AND (attributeID = 1 OR attributeID = 2 OR attributeID = 3);


那将使用那些属性中的任何一个来获取所有的dataID,我想要具有所有这些属性的dataID。

有什么建议吗?

仍然使用比基本选择更多的查询来解决问题。

最佳答案

由于您需要读取Attributes表的三个不同行,因此我建议使用JOIN来避免子查询。

SELECT a1.dataID
FROM
    Attributes a1
    JOIN Attributes a2 ON
        a1.dataID=a2.dataID
    JOIN Attributes a3 ON
        a2.dataID=a3.dataID
WHERE
    a1.dataID = 1 AND
    a1.attributeID = 1 AND
    a2.attributeID = 2 AND
    a3.attributeID = 3;

09-04 13:31