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

时间:2014-03-24 12:10:35

标签: mysql

我有供应商表,其中有许多不同的供应商,但我想展示一个特定的供应商而不是另一个如果他们都在场。有没有办法在SELECT语句中比较结果?

有些事情:

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

这在MySQL中是否可行,或者创建数据并以这种方式做得更好?

谢谢,

瑞克

编辑@Jim

目前我正在选择所有内容,结果如下:

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

Acme公司和Acme公司(西北航空公司)是同一家公司,所以如果它们都出现在结果中(有时候不会出现),那么首选的是显示Acme Companys的价格。

2 个答案:

答案 0 :(得分:0)

如果您只想返回一行,那么您可以进行奇特的排序并选择第一个结果:

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'(如果存在),否则'Supplier1'

编辑:

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

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

这将返回一个列表,其中包含一个供应商或另一个供应商,但不包含两者。

答案 1 :(得分:0)

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

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

更好的长期解决方案是存储重复的公司。我可能有一个parent_supplier字段。