2013-03-27 68 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子句中使用。