mysql - MySQL HAVING 1 与子选择
问题描述
我试图找到一个只有一个 option_group 的产品,想象一组产品和 product_options 主要产品只有一组选项和一个或多个可以包含多个选项组的捆绑产品
Products:
ID, Name, Price
1, Jacket, 10.00
2, Jacket & Hat, 15.00
3, Jacket, Hat & Gloves, 20.00
4, Hat, 5.00
Options
ID, product_id, option_group, option_name, option_value, option_code
1, 1, 1, size, small, jacksm
2, 1, 1, size, medium, jackme
3, 1, 1, size, large, jackla
4, 2, 1, size, small, jacksm
5, 2, 1, size, medium, jackme
6, 2, 1, size, large, jackla
7, 2, 2, size, small, hatsm
8, 2, 2, size, medium, hatmed
在上述示例数据中,产品 1 Jacket 和产品 2 Jacket & Hat 中都存在相同的夹克,并且产品 3 中也存在相同的夹克。即使购买了捆绑的夹克和帽子,我也需要使用选项代码找到夹克产品 1。
SELECT product_id, option_group FROM product_options WHERE product_id in(
SELECT DISTINCT(product_id) from products
JOIN options OPTIONS products.product_id = product_options.product_id WHERE option_code = 'jacksm'
)
group by option_group;
我可以获得所有 id,我可以看到我需要的一个 product_id 和一个选项组,但我无法过滤到它我尝试添加 HAVING 1 = count(option_group) 但它返回并为空集?
解决方案
您必须GROUP BY product_id
在 HAVING 子句中设置条件:
SELECT product_id, MAX(option_group) option_group
FROM product_options
GROUP BY product_id
HAVING COUNT(DISTINCT option_group) = 1
推荐阅读
- php - 为什么本地 PHP 服务器没有发出警告,而 Web 服务器(hostgator)发出警告?
- chatbot - Microsoft 聊天机器人对话如何存储在 Azure 中?
- azure - Azure 订阅:在 PowerShell 上使用证书或 AAD 身份验证?
- python - AWS API 网关,1 个 lambda,每个端点具有公共和私有 vpc 访问权限?
- r - 如何在 R 中使用 ggplot2 构建正确的直方图?
- selenium - 是否可以使用 Selenium 对许多基于云的虚拟机实例进行负载测试?
- python - 'x' 未在自定义十进制转换函数中定义
- java - 如何执行基本的 Spring Boot 应用程序安全性
- html - 自定义和本地存储的图标 (png) 无法加载
- tensorflow-federated - TFF:保存模型时出现类型错误