[英]How do I exclude multiple results from a query if a condition is met in one row
[英]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.