mysql在一列和左连接上不同

s8vozzvw  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(195)

我有一个带有左联接的sql查询:

SELECT i.id
     , i.user_id
     , i.date
     , h.cat_id
  FROM io__image i
  LEFT 
  JOIN io__image_cat_hext h
    ON h.image_id = i.id
 WHERE i.home_granted >= 1 
   AND user_id = 40
 ORDER 
    BY i.date DESC

结果如下:

id   user_id          date       cat_id     
530     40  2018-05-12 20:45:54     42
528     40  2018-05-11 22:59:17     42
518     40  2018-05-11 17:22:30     42
508     40  2018-05-09 13:45:40     37
504     40  2018-05-06 22:40:31     37
492     40  2018-05-02 21:21:20     37
490     40  2018-05-02 16:16:09     36
481     40  2018-05-02 15:08:35     36

有可能得到不同的分类号吗?我试过分组方式:

SELECT i.id
     , i.user_id
     , i.date
     , h.cat_id
  FROM io__image i 
 GROUP 
    BY h.cat_id
  LEFT 
  JOIN io__image_cat_hext h
    ON h.image_id = i.id
WHERE i.home_granted >= 1 
   AND user_id = 40
 ORDER 
    BY i.date DESC

但我有个错误:
第4行的“left join io\uu image\u cat\u hext on io\uu image\u cat\u hext.image\u id=io\uu image.id wher”附近的语法

bjp0bcyl

bjp0bcyl1#

很难理解你的确切意思 DISTINCT cat_id 在这种情况下。也许你在找这样的东西?

SELECT io__image.id,
       io__image.user_id,
       io__image.date,
       io__image_cat_hext.cat_id
       FROM (SELECT max(io__image_cat_hext.image_id) image_id,
                    io__image_cat_hext.cat_id
                    FROM io__image_cat_hext
                    GROUP BY io__image_cat_hext.cat_id) io__image_cat_hext
            INNER JOIN io__image
                       ON io__image.id = io__image_cat_hext.image_id
       ORDER BY io__image.date DESC;

它只会为每个类别提供id最高的图像。如果id是自动递增的,那就是最近插入的图像。

2guxujil

2guxujil2#

如果你只想要 cat_id 值,则可以执行以下操作:

select h.cat_id
from io__image i join
     io__image_cat_hext h
     on h.image_id = i.id
where i.home_granted >= 1 and i.user_id = 40
group by h.cat_id
order by max(i.date) desc;

没有显示你想要的结果,这似乎是最适合你的问题。

相关问题