You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询:为每个property匹配优先级缩略图或首行gallery图片

解决properties与gallery表的图片匹配查询问题

表结构信息

properties表

idproperty
1propertyA
2propertyB

gallery表

idphoto_nameproperty_idis_thumbnail
1photo110
2photo211
3photo310
4photo420
5photo520
6photo620

查询需求

查询properties表的同时,为每个property匹配gallery表中的对应图片,匹配规则:

  • 优先选择is_thumbnail = 1的图片;
  • 若不存在符合上述条件的图片,则选择gallery表中匹配property_id的首行记录(按id升序的第一条)。

期望查询结果

idphoto_nameproperty
1photo2propertyA
2photo4propertyB

完整SQL语句

SELECT 
    p.id AS id,
    p.property AS property,
    g.photo_name AS photo_name
FROM properties p
LEFT JOIN (
    SELECT 
        property_id,
        photo_name,
        -- 按规则排序:is_thumbnail=1排最前,然后按id升序取第一条
        ROW_NUMBER() OVER (
            PARTITION BY property_id 
            ORDER BY is_thumbnail DESC, id ASC
        ) AS rn
    FROM gallery
) g ON p.id = g.property_id AND g.rn = 1;

语句说明

  1. 子查询中使用ROW_NUMBER()窗口函数,按property_id分组,先按is_thumbnail降序(让值为1的排在最前面),再按id升序排序,给每组的记录编号;
  2. 主查询中只关联子查询里编号为1的记录,这样就保证每个property要么拿到缩略图,要么拿到对应gallery里的第一条记录;
  3. 相比原语句的LEFT JOIN加WHERE条件的写法,这种方式能避免过滤掉没有匹配gallery记录的property(如果有的话),同时精准匹配到符合规则的图片。

内容的提问来源于stack exchange,提问作者koubin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:10:35