我目前有一个包含两个重要表格的数据库结构。
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个结果。
答案 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方法不同,应该更快,如果您需要帮助,请告诉我们。