MySQL加入最大值

bso*_*d99 8 mysql join

通过在entry.id上加入下面的表格,我想从food_brands表中提取具有最高type_id的行 - 所以我应该得到下面的前3行,其中type_id为11940

food_brands

        id      brand       type_id 
        15375   cesar       11940
        15374   brunos      11940
        15373   butchers    11940
        15372   bakers      11939
        15371   asda        11939
        15370   aldi        11939
Run Code Online (Sandbox Code Playgroud)

类型

        id      type      quantity      food_id 
        11940   comm      53453         10497
        11939   comm      999           10496
Run Code Online (Sandbox Code Playgroud)

食品

        id      frequency   entry_id 
        10497   twice       12230
        10496   twice       12230
        10495   once        12230
Run Code Online (Sandbox Code Playgroud)

         id     number  
         12230  26  
Run Code Online (Sandbox Code Playgroud)

我对查询的尝试并没有过滤掉较低的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
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 7

一个简单的子查询应该做得很好;

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)
Run Code Online (Sandbox Code Playgroud)

一个要测试的SQLfiddle.


Tar*_*ryn 4

如果您只想返回类型 id 的行food_brandsmax您应该能够使用:

SELECT fb.*
FROM food_brands fb
INNER JOIN
(
  select max(id) id
  from types
) t
  on fb.type_id = t.id
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle 演示