11

通过加入 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

类型

        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
4

3 回答 3

10

一个简单的子查询应该就可以了;

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)

一个用于测试的 SQLfiddle

于 2013-03-27T19:00:07.417 回答
2

如果您只想返回food_brands带有max类型 id 的行,您应该可以使用:

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

请参阅带有演示的 SQL Fiddle

于 2013-03-27T18:23:13.483 回答
0

我不知道你为什么要在t2子查询之后执行所有这些内部连接,因为你只是检索 的列fb,但我想你没有显示整个查询,你只是想得到一个修复.

问题实际上出在子查询中t2:在那里,出于某种不为人知的原因,您选择执行 aGROUP BY id更改MAX函数语义以生成每个最大值的最大值id,并且由于您要询问该列的最大值,MAXGROUP BY相互消除. 只需删除该GROUP BY子句即可修复查询。

如果由于某种不为人知的原因您不能删除该子句,也许替换MAX(id)id添加ORDER BY id DESC LIMIT 1就可以了。

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

于 2013-03-28T11:51:14.963 回答