mysql - 过滤MYSQL数据库中的聚合值

标签 mysql

我有一个名为 store 的表和一个名为 products 的表。

数据结构如下:

Store table 
ID NAME
1, 'red fruit store';
2, 'blue fruit store';
3, 'orange fruit store';

Fruits table
ID STORE_ID PRODUCT_NAME
1, 1, 'orange';
2, 1, 'apple';
3, 1, 'banana';
4, 2, 'apple';
5, 3, 'banana';
6, 3, 'pear';

Vegetables table
ID STORE_ID PRODUCT_NAME
1, 1, 'tomato';
2, 1, 'carrot';
3, 1, 'potato';
4, 2, 'cabbage';
5, 3, 'tomato';
6, 3, 'carrot';

如果我想选择有的商店

  • 橙子
  • 一种或多种(香蕉、苹果梨)
  • 还有番茄或胡萝卜

我怎样才能做到这一点?

最佳答案

您可以使用以下解决方案,将 GROUP BYHAVING 结合使用:

SELECT s.ID, MAX(s.NAME) 
FROM Store s INNER JOIN (
  SELECT * FROM Fruits
  UNION ALL
  SELECT * FROM Vegetables
) t1 ON s.ID = t1.STORE_ID
GROUP BY s.ID
HAVING SUM(t1.PRODUCT_NAME = 'orange') > 0
  AND SUM(t1.PRODUCT_NAME IN ('apple', 'banana', 'pear')) > 0
  AND SUM(t1.PRODUCT_NAME IN ('tomato', 'carrot')) > 0;

demo on dbfiddle.uk

关于mysql - 过滤MYSQL数据库中的聚合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941995/

相关文章:

php - 如何通过redbeanphp查询同一个表中的多对多关系?

mysql - 您可以手动管理事务提交/回滚吗?

c# - 填充我的下拉列表 C# asp.net

javascript - 通过nodejs将mysql(sequelize)表数据导出为json

javascript - 在Extjs中提示警告消息框

php - 多对多关系数据库的复合FK表

mysql - 正确连接多个多对多表 - MySQL 查询

mysql 加入和限制

mysql - 设计和存储货币汇率交叉表

mysql - MySQL中根据FK和日期计算差异