当前位置: 首页 > 面试题库 >

SQL在左联接上获取最大ID字段

池兴邦
2023-03-14
问题内容

我正在尝试从tblimage中提取与每个用户的tblimage中的maxid对应的照片。目前,我正在从消息表中获取所有消息,并为发布消息的用户提供了一张随机照片,我希望该照片是最新上传的照片。按照现在的书写方式,它只是从桌子上拉出一张随机照片。有什么建议?

表结构是这样的:

消息:msgid,消息,user_id,event_id
tblimage:id,照片,userid

SELECT messages.*, tblimage.photo, max(tblimage.id) 
        FROM messages LEFT JOIN tblimage ON messages.user_id = tblimage.userid 
        GROUP BY messages.msg_id, messages.user_id 
        ORDER BY messages.msg_id DESC, tblimage.id desc

问题答案:

尝试

SELECT messages.*, T2.photo
FROM messages
LEFT JOIN (SELECT userid, MAX(id) AS maxid
           FROM tblimages
           GROUP BY userid) AS T1
ON messages.user_id = T1.userid
LEFT JOIN tblimages AS T2
ON T2.id = T1.maxid
ORDER BY messages.msg_id DESC

会在tblimages中为每个用户找到max(id),然后使用该值将每个用户加入该用户的最新照片。



 类似资料:
  • 问题内容: 这是我的namedquery: @NamedQuery(name =“ User.findOneWithLists”,查询=“从用户u中选择u” +“左联接FEACH u.aTemplates” +“左联接FE.bTemplates” +“左联接FE.bp” +“左JOIN FETCH u.aCredentials“ +” LEFT JOIN FETCH u.st(st.deleted

  • 问题内容: 我有一个表 阿 与绳柱 一 和表 乙 与串列 b 。a是b的子字符串。现在,我想将 a和b 上的两个表连接起来。这可能吗? 我想要这样的东西: 如何用SQL(Transact-SQL)编写此代码? 问题答案: 您可以使用像

  • 问题内容: 我有两张桌子。表A列出了员工姓名。表B是一个复杂的表,其中包含有关员工打来的电话的信息。 我的目标是制作一个包含“名称”和“ callCount”列的表。我的目标是“左加入”和“分组依据”,但是我一直想念没有打过电话的员工。我怎样才能只保留名称并在其中放置零? 也许我很亲密,有人可以指出我的错字吗?在此先感谢您的帮助,以下是SQL: 问题答案: 这是一个JOIN而非NULL问题:您的过

  • 问题内容: 大多数SQL方言都接受以下两个查询: 现在显然当您需要外部联接时,需要第二种语法。但是,在进行内部联接时,为什么我应该更喜欢第二种语法(反之亦然)? 问题答案: 在大多数现代数据库中,不赞成使用仅列出表并使用子句指定连接条件的旧语法。 这不仅是为了展示,当您在同一查询中同时使用INNER和OUTER联接时,旧语法可能会变得模棱两可。 让我给你举个例子。 假设您的系统中有3个表: 每个表

  • 我使用SQL API在Azure Cosmos DB集合中使用JOIN查询文档。 我有两个联系文件,一个是有财产地址的,另一个是没有地址的。 我需要得到所有人的地址列表(包括没有任何地址的人)。我已经使用下面的查询来执行此操作。但它给出了有地址的人名单。 实际产出:

  • 我有一张siswa和kelas的联合表格。在kelas表中有一列idSiswa,它来自siswa表的id。问题是当kelas加入时,我如何从他那里获得id。当我尝试获取id时,它显示了来自siswa表的id,而不是来自kelas表的id,我也已经使用了右连接和左连接,但仍然没有得到答案 我使用来自laravel的查询生成器来运行查询,这是我的查询