SQL复杂组/按类别加入

时间:2010-05-12 08:08:58

标签: sql database

我目前有一个包含两个重要表格的数据库结构。

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

2)特定食物(苹果,橘子,胡萝卜,生菜,牛排,猪肉)

我目前正在尝试构建一个SQL语句,以便我可以拥有以下内容。

水果< Apple,Orange

蔬菜<胡萝卜,生菜

肉类<牛排,港口

我尝试使用如下语句

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

但这会返回每个特定食物,而我只想要每个类别的前2个。所以我基本上需要我的子查询在其中有一个限制语句,以便它只找到每个类别的前2个。

但是,如果我只是做以下

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

我的陈述只返回2个结果。

1 个答案:

答案 0 :(得分: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方法不同,应该更快,如果您需要帮助,请告诉我们。