最大值上的MySQL连接
通过连接entry.id上的下表,我想从food_brands表中提取具有最高type_id的行,因此我应该得到下面的前3行,type_id为11940 食品品牌最大值上的MySQL连接,mysql,join,Mysql,Join,通过连接entry.id上的下表,我想从food_brands表中提取具有最高type_id的行,因此我应该得到下面的前3行,type_id为11940 食品品牌 id brand type_id 15375 cesar 11940 15374 brunos 11940 15373 butchers 11940 15372 bakers 1
id brand type_id
15375 cesar 11940
15374 brunos 11940
15373 butchers 11940
15372 bakers 11939
15371 asda 11939
15370 aldi 11939
类型
食物
条目
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
如果您只想使用
max
类型id从food\u brands
返回行,您应该能够使用:
SELECT fb.*
FROM food_brands fb
INNER JOIN
(
select max(id) id
from types
) t
on fb.type_id = t.id
请参见一个简单的子查询就可以了
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)
.我不知道为什么要在
t2
子查询上的一个之后进行所有这些内部联接,因为您只检索fb
的列,但我假设您没有显示整个查询,您只想修复该查询
这个问题实际上在子查询t2
中:由于某种未知的原因,您选择按id执行分组,这会更改MAX
函数语义,以生成每个id
的最大值,并且由于您正在请求该列的最大值,MAX
和GROUP BY
ca彼此分离。只需删除GROUPBY
子句即可修复查询
如果由于某种不为人知的原因,您无法删除该条款,则可以将MAX(id)
替换为id
并添加ORDER by id DESC LIMIT 1
此外,您的子查询可能还应该选择food\u id
,因为它在随后的内部联接
子句中使用。什么是feeding\u id
??didierc-很好地发现了!更新
SELECT fb.*
FROM food_brands fb
INNER JOIN
(
select max(id) id
from types
) t
on fb.type_id = t.id
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)