2012-12-29 109 views
1

記錄我有一個表:獲得通過最低ID

 
table name: page_description 
desciption_id (pk), page_id (fk), language_id (fk), name 
1,     1,   1,    First page 
2,     1,   2,    First page_second_lang 
3,     2,   1,    Second page 
4,     3,   2,    Third page 

Generaly this table contains datas from pages on different languages. 

The first row means: First page name is 'First Page' at language 1 - whitch is english right now. 

I want every page from the page table, and the name at the LOWEST language_id! 

So something like this: 
1, 1, 1, First page 
3, 2, 1, Second Page 
4, 3, 2, Third page 

我有一個查詢它:

 
SELECT * 
FROM heading_description 
GROUP BY heading_id 
ORDER BY heading_id ASC, 
     language_id ASC 

它還給我想要的東西。但如果表格看起來像這樣:

 
table name: page_description 
desciption_id, page_id, language_id, name 
1,    1,  2,   First page_second_lang 
2,    1,  1,   First page 
3,    2,  1,   Second page 
4,    3,  2,   Third page 

ORDER BY不會給我想要的東西。我試過了。

這裏: http://sqlfiddle.com/#!2/de7bd/6/0

在第一行中我希望看到LANGUAGE_ID 1

回答

1

我認爲PAGE_ID和LANGUAGE_ID是主鍵

像這樣的作品(sql fiddle

select pd.* 
    from page_description pd 
    join (select page_id, 
       min(language_id) as language_id 
      from page_description 
     group by page_id) as a 
    using (page_id, language_id); 
+0

http://sqlfiddle.com/#!2/de7bd/6/0 我編輯過。 description_id是主鍵。 page_id和language_id只是一個外鍵。有一個頁面和語言表。 –

+0

它仍然有效(http://sqlfiddle.com/#!2/de7bd/7),但您必須觀察執行計劃並可能添加更多索引。 –

0

我猜你的表的主鍵是heading_id。如果是這樣的話,你不應該在它的分組(它始終是唯一的),或者將其排序之一:

SELECT * 
FROM heading_description 
ORDER BY language_id ASC 
+0

http://sqlfiddle.com/#!2/de7bd/6/0 不要工作!在第一行,我想要language_id = 1的名字。 –

+0

我似乎很難理解你想要什麼,但[這個sql小提琴](http://sqlfiddle.com/#!2/de7bd/8)確實在第一行有language_id = 1。 – ic3b3rg

+0

確實如此,但我只想在查詢中尋找一頁。 –