2013-03-27 70 views
6

加入,从上entry.id加入下面的表格,我想提取从food_brands表具有最高TYPE_ID行 - 所以我应该得到下面的前3排,TYPE_ID 11940MySQL在最大值

food_brands

 id  brand  type_id 
     15375 cesar  11940 
     15374 brunos  11940 
     15373 butchers 11940 
     15372 bakers  11939 
     15371 asda  11939 
     15370 aldi  11939 

类型

 id  type  quantity  food_id 
     11940 comm  53453   10497 
     11939 comm  999   10496 

食品

 id  frequency entry_id 
     10497 twice  12230 
     10496 twice  12230 
     10495 once  12230 

  id  number 
     12230 26 

我在查询尝试未过滤掉较低type.id记录 - 从表中的记录下方food_brands,我得到那些TYPE_ID 11940和11939.感谢这么任何帮助解决此问题!

SELECT fb.* 
         FROM food_brands fb 
         INNER JOIN types t ON fb.type_id = t.id 
         INNER JOIN 
         (
          SELECT MAX(id) AS MaxID 
          FROM types 
          GROUP BY id 
         ) t2 ON t.food_id = t2.food_id AND t.id = t2.MaxID 
         INNER JOIN foods f ON t.food_id = f.id 
         INNER JOIN entries e ON f.entry_id = e.id 
         WHERE entries.id = 12230 
+1

是什么'?feeding_id' – didierc 2013-03-27 18:33:27

+0

didierc - 斑点!更新 – bsod99 2013-03-28 10:21:43

回答

2

如果你只是想从food_brandsmax类型ID返回行,你应该能够使用:

SELECT fb.* 
FROM food_brands fb 
INNER JOIN 
(
    select max(id) id 
    from types 
) t 
    on fb.type_id = t.id 

SQL Fiddle with Demo

4

一个简单的子查询应该只是做了精细;

SELECT * FROM food_brands WHERE type_id= 
    (SELECT MAX(t.id) tid FROM types t 
    JOIN foods f ON f.id=t.food_id AND f.entry_id=12230) 

An SQLfiddle to test with

0

我不知道你为什么要在t2子查询之后做所有这些内部连接,因为你只是检索fb的列,但我想你并没有显示整个查询,而你只是希望得到一个固定的。

这个问题实际上是在子查询t2:有,对一些不为人知的原因,你选择做一个GROUP BY id它改变了MAX功能语义生成每id最大值,既然你问的最大上非常列,MAXGROUP BY彼此相邻。删除GROUP BY子句将修复查询。

如果出于某种不可回避的原因,您不能删除该条款,或许将MAX(id)替换为id并添加ORDER BY id DESC LIMIT 1即可。

此外,您的子查询也可能选择food_id,因为它在后续的INNER JOIN子句中使用。