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

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

江亮
2023-03-14
问题内容

这是一个简化的表结构:

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

TABLE product_photos (
 product_photo_id (primary key, auto_increment),
 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

问题答案:

使用:

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


 类似资料:
  • 问题内容: 以两个表为例:和。 列出产品详细信息,包括名称和ID,同时列出涉及产品的交易,包括日期,产品ID,客户等。 我需要显示一个网页,其中显示10个产品,每个产品的最近5个交易。到目前为止,如果mysql允许该部分,则似乎没有任何查询有效,并且下面的子查询也可以工作( 在“ where子句”中 出现 Unknown列“ ta.product_id”的 失败 :[ERROR:1054] )。

  • 问题内容: 好了,下面的查询: 可以使用Criteria进行以下操作: 但在此返回List中每个元素的where是and是。 但是如何使用Criteria执行以下SQL: 换句话说,我想给我一个,我不在乎。我尝试使用代替,但结果是相同的,并且Projection不允许您指定实体,而只能指定属性。 问题答案: 您可以根据条件使用。 现在,您检索所有急切加载的产品的订单。

  • 问题内容: 我有一个查询列出所有帖子: 查询列出所有行,我只希望每行显示最后2条帖子,我该怎么做? 问题答案: 这可能有用,尽管我不能说太多性能。

  • 问题内容: 我有两个表:gem和gemdetail保持连接状态。我试图将LEFT JOIN限制为gems表中的10条记录。也有两个其他表联接(gemreply和用户),但它们不会导致该问题。以下内容不起作用: 这将返回的行总数限制为10,但是由于每个gem有多个明细记录,所以我剩下不到10个gem记录。我已经阅读了每个“ LIMIT”帖子,但没有发现这种情况。 更新1:好的-感谢jviladric

  • 问题内容: 我有一些SQL几乎可以完成我想做的事情。我正在使用三个表,一个用户,一个UserPhoneNumbers和一个UserPhoneNumberTypes。我正在尝试获取要导出其电话号码的用户列表。 数据库本身很旧,并且存在一些完整性问题。我的问题是,数据库中每个电话号码只能有一种类型,但事实并非如此。运行此程序时,如果每个人包含(例如)两个“家庭”数字,我都会得到多行结果。 如何修改SQ

  • 问题内容: 如何限制从数据库检索到的结果数? 问题答案: 您可以这样尝试,以明确获取10个结果。 如果后端支持,它将自动在后端创建本机查询以检索特定数量的结果,否则将在获取所有结果后进行内存限制。