2016-04-24 61 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

相關問題