微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将联接表中的结果限制为一行

如何解决将联接表中的结果限制为一行

使用:

SELECT p.*,
       pp.*
  FROM PRODUCTS p
  JOIN PRODUCT_PHOTOS pp ON pp.product_id = p.product_id
  JOIN (SELECT x.product_id,
               MIN(x.photo_order) AS default_photo
          FROM PRODUCT_PHOTOS x
      GROUP BY x.product_id) y ON y.product_id = pp.product_id
                              AND y.default_photo  = pp.photo_order

解决方法

这是一个简化的表结构:

TABLE products (
 product_id INT (primary key,auto_increment),category_id INT,product_title VARCHAR,etc
);

TABLE product_photos (
 product_photo_id (primary key,product_id INT,photo_href VARCHAR,photo_order INT
);

一个产品可以有多张照片,每个产品的第一张产品照片(基于photo_order)是默认照片。

现在,我只需要产品详细信息页面上的所有照片,但是在列出多个产品的页面(例如产品目录页面)上,我只想显示默认照片。

因此,我要尝试的是查询产品列表,包括每个产品的默认照片。

这显然行不通,它将返回所有照片,其中每张照片都重复了产品信息:

SELECT p.*,ph.*
FROM products AS p
LEFT JOIN product_photos AS ph
ON p.product_id=ph.product_id
ORDER BY p.product_title ASC

我需要弄清楚如何做这样的事情,但是我不知道语法(或者如果可能的话)

SELECT p.*,ph.*
FROM products AS p
LEFT JOIN product_photos AS ph
    ON p.product_id=ph.product_id  **ORDER BY ph.photo_order ASC LIMIT 1**
ORDER BY p.product_title ASC

编辑:我想出了下面的答案的帮助下的解决方案,谢谢大家!

SELECT p.*,ph.*
FROM products AS p
LEFT JOIN product_photos AS ph 
    ON p.product_id=ph.product_id
    AND ph.photo_order =
    (
        SELECT MIN(z.photo_order)
        FROM product_photos AS z
        WHERE z.product_id=p.product_id
    )
GROUP BY p.product_id
ORDER BY p.product_title ASC

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。