MySQL 查询查找跨多行的匹配项

标签 mysql sql database

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

我想做的是运行一个查询,查找所有具有一组特定 attributeID 的数据 ID。我做不到:

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;

关于MySQL 查询查找跨多行的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225617/

相关文章:

sql-server - 使用从具有 XML 批量格式文件的 .csv 文件插入 Openrowset 创建临时表

php - 如何更新两个表而不收到不明确的错误消息

php - 优化SQL查询以从大量MySQL数据库中获取数据

sql - 在 MySQL 中创建分类表

MySQL vs SQL Server 2008 R2 简单选择查询性能

sql - 如何测试数据库事务逻辑?

php - 创建一个 INDEX 以改善由 ORDER BY 导致的缓慢执行时间

mysql - 在 SQL 中读取 csv 文件

mysql - 从两个表和一个 where 条件中选择

同一台linux机器的多个实例上的Mysql查询缓存处理