2010-05-12 55 views
1

我目前擁有一個包含兩個重要表的數據庫結構。SQL複雜組/按類別加入

1)食物類型(水果,蔬菜,肉類)

2)特定的食物(蘋果,橙子,胡蘿蔔,生菜,牛排,豬肉)

目前我正在試圖建立一個SQL語句,我可以擁有以下內容。

水果<蘋果,橘子

蔬菜<胡蘿蔔,生菜

肉類<牛排,港口

我已經使用如下

Select * From Food_Type join (Select * From Foods) as Foods on Food_Type.Type_ID = Foods.Type_ID 

一份聲明中嘗試,但這個回報每種特定食物,而我只需要每個類別的前2個。所以我基本上需要我的子查詢中有一個限制語句,以便它只能找到每個類別的前兩個。

但是,如果我只是做了以下

Select * From Food_Type join (Select * From Foods LIMIT 2) as Foods on Food_Type.Type_ID = Foods.Type_ID 

我的發言只返回2個結果所有。

+2

你在使用什麼數據庫系統? – Anonymoose 2010-05-12 08:10:07

+0

查看http://stackoverflow.com/questions/2596489/how-to-select-the-last-two-records-for-each-topic-id-in-mysql – Salil 2010-05-12 08:14:22

+1

解決此問題的查詢可能依賴於語法這是數據庫特定的或取決於數據庫版本支持的內容。沒有多少人會希望在SQL Server中編寫您的查詢來發現您正在使用MySql,這就是列出您正在使用的數據庫非常重要的原因。 – 2010-05-12 12:41:54

回答

1

回答here,但最終答案是mysql特定的。

如果你的數據庫是更符合標準,你也可以使用PARTITION

注:

Select * 
From Food_Type join 
    (Select * From Foods LIMIT 2) as Foods on Food_Type.Type_ID = Foods.Type_ID 

(Select * From Foods LIMIT 2)只返回兩條記錄了整個表時,只能加入查詢後會發生返回。

要做你對你的想法將不得不使用嵌套子查詢。

Select * 
From Food_Type join 
    Foods on Food_Type.Type_ID = Foods.Type_ID 
Where Foods.Foods_ID IN (Select * 
         From Foods AS nested 
         Where nested.Type_ID = Food_Type.Type_ID 
         ORDER BY ? 
         LIMIT 2) 

PARTITION/RANK方法是不同的,如果您需要幫助,請告訴我們。