基于此表,如何获得mysql php的预期输出?

基于此表,如何获得mysql php的预期输出?,php,mysql,Php,Mysql,这是一种挑战。预期产量,所有水果都来自纽约州或ak州,如果标记好=价格10,坏=价格20,OK=价格40。所以,来自纽约州的苹果,有好的和坏的标记匹配价格10和20,而苹果没有好的标记行,所以不需要比较。香蕉马克坏=价格20,但OK不等于价格40,所以我将排除香蕉。pear match OK=price 40,state=ny,没有好的和坏的标记行。因此,我的输出应该是苹果和梨。我该怎么做 您应该在何处和/或条件 你应该用一双不在里面的鞋 select distinct fruit from

这是一种挑战。预期产量,所有水果都来自纽约州或ak州,如果标记好=价格10,坏=价格20,OK=价格40。所以,来自纽约州的苹果,有好的和坏的标记匹配价格10和20,而苹果没有好的标记行,所以不需要比较。香蕉马克坏=价格20,但OK不等于价格40,所以我将排除香蕉。pear match OK=price 40,state=ny,没有好的和坏的标记行。因此,我的输出应该是苹果和梨。我该怎么做


您应该在何处和/或条件

你应该用一双不在里面的鞋

select distinct fruit from  my_table 
where fruit not in (select distinct fruit from my_table 
     where (mark, price) not in (select 'good', 10 from dual 
                            union 
                            select 'bad, 20 from dual
                            union 
                            select 'OK', 40 from dual))
state IN ('ny','ak') ;

你应该在哪里和/或条件

你应该用一双不在里面的鞋

select distinct fruit from  my_table 
where fruit not in (select distinct fruit from my_table 
     where (mark, price) not in (select 'good', 10 from dual 
                            union 
                            select 'bad, 20 from dual
                            union 
                            select 'OK', 40 from dual))
state IN ('ny','ak') ;

可能返回的潜在水果列表,因为一行符合规范:

SELECT t.fruit
  FROM `table` t
 WHERE t.state IN ('ny','ak')
   AND ( ( t.mark = 'good' AND t.price = 10 )
      OR ( t.mark = 'bad'  AND t.price = 20 )
      OR ( t.mark = 'OK'   AND t.price = 40 )
       )
 GROUP BY t.fruit
我们不想退回的水果列表,因为有一行不符合规格:

SELECT t.fruit
  FROM `table` t
 WHERE t.state IN ('ny','ak')
   AND NOT ( t.mark = 'good' AND t.price = 10 )
   AND NOT ( t.mark = 'bad'  AND t.price = 20 )
   AND NOT ( t.mark = 'OK'   AND t.price = 40 )
 GROUP BY t.fruit
请注意,这还包括标记列的值不是good、bad或OK的行。如果我们想忽略具有其他mark值的行,那么我们要添加

   AND t.mark IN ('good','bad','OK')
这给了我们两套。我们可以将它们与反连接操作结合起来。举个例子,如果我们有表
fruit\u to\u include
fruit\u to\u exclude

SELECT i.fruit
  FROM fruit_to_include i
  LEFT
  JOIN fruit_to_exclude e
    ON e.fruit = i.fruit
 WHERE e.fruit IS NULL
 ORDER BY i.fruit
我们可以使用内联视图替换这些占位符表名,使用提供要包含的结果和要排除的结果的查询。这里唯一的区别是将伪表名替换为(MySQL称之为)派生表


可能返回的潜在水果列表,因为一行符合规范:

SELECT t.fruit
  FROM `table` t
 WHERE t.state IN ('ny','ak')
   AND ( ( t.mark = 'good' AND t.price = 10 )
      OR ( t.mark = 'bad'  AND t.price = 20 )
      OR ( t.mark = 'OK'   AND t.price = 40 )
       )
 GROUP BY t.fruit
我们不想退回的水果列表,因为有一行不符合规格:

SELECT t.fruit
  FROM `table` t
 WHERE t.state IN ('ny','ak')
   AND NOT ( t.mark = 'good' AND t.price = 10 )
   AND NOT ( t.mark = 'bad'  AND t.price = 20 )
   AND NOT ( t.mark = 'OK'   AND t.price = 40 )
 GROUP BY t.fruit
请注意,这还包括标记列的值不是good、bad或OK的行。如果我们想忽略具有其他mark值的行,那么我们要添加

   AND t.mark IN ('good','bad','OK')
这给了我们两套。我们可以将它们与反连接操作结合起来。举个例子,如果我们有表
fruit\u to\u include
fruit\u to\u exclude

SELECT i.fruit
  FROM fruit_to_include i
  LEFT
  JOIN fruit_to_exclude e
    ON e.fruit = i.fruit
 WHERE e.fruit IS NULL
 ORDER BY i.fruit
我们可以使用内联视图替换这些占位符表名,使用提供要包含的结果和要排除的结果的查询。这里唯一的区别是将伪表名替换为(MySQL称之为)派生表


值是否按字面意思
'NULL'
为字符串?或者
NULL
作为一个值?当你说“不能做我期望的事情”时,你通过该查询得到的结果是什么?您是否可以编辑您的问题以包含当前结果与所需结果?值是否以字符串形式逐字显示为
'NULL'
?或者
NULL
作为一个值?当你说“不能做我期望的事情”时,你通过该查询得到的结果是什么?您是否可以编辑您的问题,以包含当前结果与期望结果?感谢您的回答,您的代码仅适用于一个问题。在标记列上,(good,bad,OK),如果有一个值不匹配,我想排除水果。比如,香蕉与坏标记上的价格匹配,但与OK标记上的40不匹配,所以删除。您的查询将输出香蕉,因为它与坏标记上的价格20相匹配。感谢您的回复,您的代码只有一个问题是好的。在标记列上,(good,bad,OK),如果有一个值不匹配,我想排除水果。比如,香蕉与坏标记上的价格匹配,但与OK标记上的40不匹配,所以删除。您的查询将输出香蕉,因为它与坏标记上的价格20匹配。