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