mysql - 我如何通过多个值过滤一列(严格过滤)?

标签 mysql sql

经过多次尝试仍无法解决这个问题,所以我决定与您分享,看看您是否可以帮助我。

我创建了高级产品搜索,但无法根据所选类别过滤产品,我解释一下:

我有两个表:产品和产品类别。

+------------------+
|     Prodcuts     |
+-------+----------+
| pr_id | pr_title |
+-------+----------+
| 1     | Iphone   |
+-------+----------+
| 2     | Samsung  |
+-------+----------+
| 3     | Xiaomi   |
+-------+----------+
+--------------------------+
|    Products Categories   |
+------------+-------------+
| ct_product | ct_category |
+------------+-------------+
| 1          | 5           |
+------------+-------------+
| 1          | 7           |
+------------+-------------+
| 2          | 8           |
+------------+-------------+

I want to filter only the products have the selected categories, for example, my mysql query is:

SELECT * products WHERE products.pr_id IN (SELECT ct_product FROM products_categories WHERE ct_category IN (5, 8, 7)

此查询的结果是 Iphone 和 Samsung。

但我想要的是,如果任何产品没有选择 3 个类别,则不会显示任何内容,因为产品 id 1 没有类别 id 8,反之亦然。

我该如何解决这个问题?

最佳答案

使用不同计数()

SELECT * products WHERE products.pr_id IN(
select ct_product
from products_categories
where  ct_category IN (5, 8, 7)
group by ct_product
having count(distinct ct_category)=3
)

关于mysql - 我如何通过多个值过滤一列(严格过滤)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58337019/

相关文章:

mysql - 错误使用内连接函数/分组函数?

PHP MySQL 获取有序记录集中记录的位置

mysql - 如何针对大表优化 MySQL 查询

c# - 在 C# 中, "SELECT TOP 0 * FROM (/* ... */) s"与 ADO.NET 结合使用是否是确定 SELECT 语句中的列信息的好方法?

PHP PDO MySQL 数组仅返回列名

php - 主机 ' ' 不允许连接到此 MySQL 服务器

SQL Azure 跨地理数据中心转移定价

MySQL 查询返回额外结果

sql - 一张表三列MYSQL查询题

sql - 如何制作可重复的索引脚本?