mysql - SQL - 从具有公共(public)字段的组中获取不同的记录

标签 mysql sql

我有一个表:supplier_product

Product , Supplier, Status
Sugar   , N_Supp,   MAIN
Sugar   , S_Supp,   SUB
Sugar   , E_Supp,   MAIN
Water   , N_Supp,   SUB
Water   , S_Supp,   SUB
Water   , W_Supp,   SUB
Milk    , S_Supp,   MAIN
Milk    , N_Supp,   MAIN
Cream   , N_Supp,   SUB
Cream   , E_Supp,   SUB 
Coffee  , S_Supp,   MAIN 
Coffee  , W_Supp,   SUB
Coffee  , N_Supp,   SUB

我必须获取所有状态只有“SUB”的产品。 我用了这段代码。但我无法找出查询的问题,它的结果不正确

SELECT DISTINCT
    s.product
FROM supplier_product s
WHERE EXISTS (SELECT
    *
FROM supplier_product
WHERE supplier_product.product = s.product
AND supplier_product.status = 'SUB')

它应该得到以下结果:

Product
Water
Cream

如果您遇到此问题或任何链接/建议,请提供帮助。我会很高兴了解它。谢谢。

最佳答案

使用聚合最容易做到这一点:

select sp.product
from supplier_product sp
group by sp.product
having min(sp.status) = max(sp.status) and   -- the statuses are all the same
       min(sp.status) = 'SUB';               -- the value is 'SUB'

关于mysql - SQL - 从具有公共(public)字段的组中获取不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39908463/

相关文章:

c# - 为什么同一存储过程调用会被多次触发

javascript - 如何在 Sequelize 中进行自加入?

sql - 加入不处理 information_schema.tables 与用户表

php - 创建表时出错 : No database selected

php - 如何使用标题使用 MATCH() AGAINST() 获取相关问题

MySQL 连接表

mysql - 比较两个整数在每个小数位的数字

mysql - SQL 一种从较大类别中选择项目的简单方法

apache - 从命令行提取 mysql 数据库

php - MYSQL和php问题