mysql - MYSQL中如何用相关表过滤具有多个特征的资源
问题描述
我在 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;
这应该适合你。
推荐阅读
- android - 动态更改 TextView 的样式和文本
- database - RESTful API:根据 URL/端点连接到特定数据库
- c# - 如何将数组从 Angular 6 传递到 ASP.NET Core API 以获取 GET 方法?
- css - 水平文本旁边的垂直文本反应原生?
- reactjs - 在 Promise 之外未定义 Redux 操作
- reactjs - 如何在 React Native 中创建单个视图节点
- google-apps-script - 我会在哪里放置文件搜索包含某些单词
- javascript - JS - 如何挂钩来自不同文件的成功和错误回调
- python - 如何在熊猫中对时间值进行排序
- postgresql - Hibernate 在尝试使用生成的 UUID 持久化 DTO 时不断询问 hibernate_sequence