如果满足条件,如何在MySQL中选择一行,如果不满足条件则如果选择另一行?

时间:2017-01-18 11:15:18

标签: mysql sql

我有一张这样的表,我们会调用表foo

+----+------------+----------+----------+
| 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

2 个答案:

答案 0 :(得分: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行。然后是西班牙语中不匹配的行。

答案 1 :(得分:0)

另一种解决方案是:在表foo中放置默认名称,即英文名称。

所有其他名称,例如西班牙语,在单独的表格中(例如foo_I18N