通过在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
答案 0 :(得分:5)
一个简单的子查询应该做得很好;
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)
答案 1 :(得分:2)
如果您只想使用food_brands
类型ID返回max
的行,您应该可以使用:
SELECT fb.*
FROM food_brands fb
INNER JOIN
(
select max(id) id
from types
) t
on fb.type_id = t.id
答案 2 :(得分:0)
我不知道你为什么要在t2
子查询之后执行所有这些内连接,因为你只检索fb
的列,但我想你没有显示整个查询,你只想修复那个。
问题实际上在子查询t2
中:由于某些无法解释的原因,您选择执行GROUP BY id
更改MAX
函数语义以生成每个{的最大值{1}},并且由于您要求该列的最大值,id
和MAX
相互匹配。只需删除GROUP BY
子句即可修复查询。
如果出于某些原因,您无法删除该条款,可能会将GROUP BY
替换为MAX(id)
并添加id
。
此外,您的子查询应该也可以选择ORDER BY id DESC LIMIT 1
,因为它在随后的food_id
子句中使用。