2016-04-24 60 views
-2

我有1个包含名称和语言列的表。如果第一次选择mach,则选择行,如果不是,则移动到下一个选择

假设我有两种可用的编号为1和2的语言 我想选择语言为2的所有名称,如果在语言= 2中没有任何行,那么我将选择语言为1的那一个。只有语言让行= 1,如果语言= 2不可

ID language name(as code) 
1 1  name_1 
2 2  name_1 
3 1  name_2 

我想是这样的:

ID language name 
1 2  name_1 
3 1  name_2 

感谢您的帮助。对不起,我的英语

+0

你如何定义选择? – Mujahidh

+1

请把一些样品 –

+0

你怎么知道两行实际上是不同语言的同名? – Selcuk

回答

0

你的车写这样的查询:

SELECT ...... 
FROM mytable 
WHERE ........ (without languageID) 
ORDER BY languageID DESC (if you want to have 2 else ASC) 
LIMIT 1; 

所以它只会是否存在其他选择laguageID 2 1或0

一个样品更

SELECT ...... 
FROM mytable 
WHERE ........ (without languageID) 
ORDER BY ELT(languageID,'1','0','4','3'); 

数字IN elt是订单ID。可以说你想要有LANGUAGEID 2作为第一个把最低的NO IN字段2 LIKE 0

+0

谢谢,但我想得到一个集合,而不是单行 – Thelearning

+0

@Thelearning - 我在我的答案中添加一个示例 –

0

你的答案是这样的。

select * 
from t 
where language = 2 
union 
select * 
from t 
where language = 1 
     and 0 in (select count(1) 
       from t 
       where language = 2) 

第一选择得到所有名与语言= 2

第二选择得到与语言的所有名称= 1,如果不符合语言= 2

1

我想你想所有的任何名称语言1(缺省值)的行与语言2(仅当我存在)的值,因此:

表:

create table `lang` 
(
    id int, 
    lang_id int, 
    name varchar(20), 
    description varchar(255) 
); 

一些数据:

insert into `lang` (id, lang_id, name, description) values 
(1, 1, 'language', 'English'), 
(2, 2, 'language', 'Português'), 
(3, 1, 'title', 'My Project'), 
(4, 2, 'title', 'Meu Projeto'), 
(5, 1, 'var1', 'My English only variable'); 

查询:

select 

c1.name, coalesce(c2.description, c1.description) as description 

from lang c1 

left join lang c2 on c1.name = c2.name and c2.lang_id = 2 

where c1.lang_id = 1 

其结果是:

name  | description 
language | Português 
title | Meu Projeto 
var1  | My English only variable 

SQL Fiddle

相关问题