繁体   English   中英

如果满足条件,则从结果中排除

[英]Exclude from results if condition is met

我的供应商表中有许多不同的供应商,但我想显示一个特定的供应商,而不是另一个(如果两个都存在)。 有没有办法比较SELECT语句中的结果?

类似于以下内容:

SELECT 
supplier,
price 
FROM table 
If IN supplier (Supplier1,Supplier2) Then 
SELECT supplier  
FROM table 
WHERE supplier <> Supplier1

这在MySQL中可能吗,还是创建一个Array并这样做更好?

谢谢,

里克

编辑@Jim

目前,我选择了所有结果,结果如下所示:

Supplier Name | Supplier Price
Acme Company | $12
Acme Company (Northwest)    | $12
Bobs Company    | $13
Craigs Company  | $15

Acme公司和Acme公司(西北)是同一家公司,因此,如果它们都出现在结果中(有时却不出现),则首选是只显示Acme公司的价格。

如果只希望返回一行,则可以进行花式排序并选择第一个结果:

SELECT supplier, price
FROM table 
WHERE supplier in (Supplier1, Supplier2)
ORDER BY (case when supplier = 'Supplier1' then 1
               when supplier = 'Supplier2' then 2
          end) DESC
LIMIT 1;

供应商根据case的条件查询此订单。 由于使用了desc关键字,因此'Supplier2'将是第一个,而'Supplier1'将是第二个。 limit选择第一行'Supplier2'如果存在)将为'Supplier2' ,否则为'Supplier1'

编辑:

如果您只想消除一个供应商(如果存在),那么请执行以下操作:

select supplier, price
from table t
where not (supplier = 'Supplier1' and
           exists (select 1 from table t2 where t2.supplier = 'Supplier2'
          );

这将返回包含一个或另一个供应商,但没有两个供应商的列表。

您可以按供应商字段分组,如果供应商是子公司,则将其切换:

SELECT 
IF(supplier = 'Acme Company (Northwest)', 'Acme Company',supplier),
price 
FROM table
GROUP BY IF(supplier = 'Acme Company (Northwest)', 'Acme Company',supplier)

一个更好的长期解决方案是存储重复的公司。 即也许有一个parent_supplier字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM