小编典典

MySQL查询跨多行查找匹配项

sql

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

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

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

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

有什么建议吗?

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


阅读 129

收藏
2021-05-05

共1个答案

小编典典

由于您需要读取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;
2021-05-05