mysql - MYSQL中如何通过相关表过滤具有多种特征的资源

标签 mysql sql

我在 MYSQL 中有 3 个表。

[Resources]
Id
Name
....
[Characteristics]
Id
Name
...

“资源”可以有多个“特征”,所以我在其他表中建立了关系:

[RecurCaract]
Id
IdRes (Id of Resource)
IdCha (Id of Characteristic)

例如,我有这些具有关联特征的记录:

    Example 1 - Car1 / Car2 / Car3 / Car4
    Example 2 - Car1 / Car3
    Example 3 - Car2 / Car3
    Example 4 - Car3 / Car4

我需要一个查询来显示选择了 Car2 和 Car3(两者)的所有资源。

在此示例中(示例 1 和示例 3)

要搜索启用了特征编号 25 的资源...我可以使用以下查询:

SELECT Resources.Name, Characteristics.Name FROM Resources LEFT JOIN RecurCaract ON (Resources.Id=RecurCaract.IdRes) LEFT JOIN Characteristics ON (Characteristics.Id=RecurCaract.IdCha) WHERE Characteristics.Id = '25'

但是...如果我需要特征号为 25 且启用了特征号 3 的资源(两者)...我就会遇到问题。

SELECT Resources.Name, Characteristics.Name FROM Resources LEFT JOIN RecurCaract ON (Resources.Id=RecurCaract.IdRes) LEFT JOIN Characteristics ON (Characteristics.Id=RecurCaract.IdCha) WHERE Characteristics.Id = '25' AND Characteristics.Id = '3'

该查询不起作用。

最好的方法是什么?

最佳答案

select r.name RESOURCE, c1.name Characteristic_1, c2.name Characteristic_2 from 
RecurCaract rc1 inner join RecurCaract rc2 on rc1.resource = rc2.resource left join 
resources r on r.id = rc1.resource left join characteristics c1 on c1.id = 
rc1.characteristic left join characteristics c2 on c2.id = rc2.characteristic
where rc1.characteristic = 25 and rc2.characteristic = 3;

这应该适合你。

关于mysql - MYSQL中如何通过相关表过滤具有多种特征的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863487/

相关文章:

php - 正在使用数据库中的最后一条记录,而不是所需的记录

mysql - 无法理解 ibd 文件加密如何帮助保护 MySql 中的数据

mysql - 为什么 Mysql 读取的行数超过我设置的限制?

sql - 在 SQL (Postgresql) 中检查是否可以预订

MySQL 查询 ORDER BY DateTime 问题

php - 如何更新sql中具有重复键的表?

php - 如何使用 php 在临时内存中而不是在我的主机中创建 zip 文件然后下载?

java - 从 GCE 实例上的 Tomcat webapp 连接到第二代 MySQL

sql - 替换部分/行 Postgresql

sql - Access 查询表的更新