Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
最大值上的MySQL连接_Mysql_Join - Fatal编程技术网

最大值上的MySQL连接

最大值上的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

通过连接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      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)