mysql - 通过连接表满足多个 WHERE 条件
问题描述
我有一张桌子,products
和另一个,categories
。两者由 关联products_categories
。一个产品可以出现在多个类别中。
我正在尝试做的是非冗余返回满足所有条件的结果。例子:
SELECT *
FROM products as p
JOIN products_categories AS pc
ON p.PRODUCTID = pc.productid
JOIN categories AS c
ON c.id = pc.category
WHERE c.category = 'All Products'
AND c.category = 'On Sale'
AND c.category = 'Active'
GROUP
BY p.PRODUCTID
显然,我在某个地方出错了。在这种情况下,我想返回 、 和 类别中的All Products
任何On Sale
内容Active
。
解决方案
将子句中的所有AND
s 更改为OR
s,WHERE
如果您想要属于所有 3 个类别的产品,请添加一个HAVING
子句:
SELECT p.PRODUCTID
FROM products as p
JOIN products_categories AS pc ON p.PRODUCTID = pc.productid
JOIN categories AS c ON c.id = pc.category
WHERE c.category = 'All Products' OR c.category = 'On Sale' OR c.category = 'Active'
GROUP BY p.PRODUCTID
HAVING COUNT(c.id) = 3
推荐阅读
- google-chrome-devtools - PWA manifest.json - “theme_color” 和 “background_color” 不工作,启动屏幕不显示在 android 设备上
- javascript - react-redux 连接具有默认值的组件道具时出现流错误
- sql - SQL Server:获取 90 天内添加的最新日期记录实例
- dojo - 根据数组字段过滤 dstore 集合
- php - 使用 php 将图像上传到 sql 数据库时显示错误
- c++11 - 如何将使用 g++ (Ubuntu) 编译的库链接到使用 g++ (raspbian) 编译的程序?
- python - 如何从 Python 中创建具有 Matlab 数据结构中的多维数组的 Matlab 文件?
- java - 如何在 JavaFX 场景图中拖动位于另一个“形状”下方的“形状”?
- makefile - 让 gmake 尽早完成食谱
- sql-server - 返回序列号而不是时间戳