2017-01-18 185 views
-1

我有这样一个表,我们将调用表foo如果满足条件,如何在MySQL中选择一行,如果条件不满足,则选择另一行?

+----+------------+----------+----------+ 
| id | product_id | name | language | 
+----+------------+----------+----------+ 
| 1 |   1 | Potatoes | English | 
| 2 |   1 | Patatas | Spanish | 
| 3 |   3 | Bananas | English | 
+----+------------+----------+----------+ 

正如你或许可以告诉,行1和2是相同的产品,与第2行是第1行的翻译

我想选择第2行和第3行。原因是通过选择第2行和第3行,我选择了表中的所有产品(没有重复)。我想选择第2行而不是第1行,因为我对西班牙语有“语言偏好” - 我想在可能的情况下选择包含西班牙语翻译的行。如果西班牙文翻译不可用(即产品3),我们只需选择英文版(或product_id等于id栏的版本)。

如何在MySQL中处理这个问题?我目前已经得到了这个,它选择了所有的英文行,但我想申请一个条件的WHERE部分,如上所述。

SELECT * FROM foo WHERE product_id = id 
+0

这是现在整理 – e4c5

回答

1

这里有一个方法:

select f.* 
from foo f 
where f.language = 'Spanish' 
union all 
select f.* 
from foo f 
where f.language = 'English' and 
     not exists (select 1 from foo f2 where f2.product_id = f.product_id and f2.language = 'Spanish'); 

这将选择用英语FOO行。然后用西班牙语不匹配的行。

+0

很好的答案;我绝对没有想到这一点,谢谢你 - 但我认为你已经把订单混淆了;我希望西班牙语成为最优先考虑的事项,英语作为第二优先考虑事项......从一目了然的判断,还没有经过测试,但是你的思路是否相反? – think123