【问题标题】:sql smallest value with left join带有左连接的sql最小值
【发布时间】:2013-11-03 15:20:58
【问题描述】:

我有两个表,Article 和 Image,其中 Article 是父级,Image 具有外键列 article_id。每个图像还具有position 列,即integer

现在我需要的是获取所有文章,无论它们是否有任何图像,但对于那些有一个或多个图像的人,它需要返回一个存储在最低位置的图像position 专栏。

换句话说,沿着伪线:

SELECT FROM ALL ARTICLES LEFT JOIN IMAGES (WHERE IMAGE FOR THIS ARTICLE HAS SMALLEST POSITION)

什么 SQL 查询来得到上面的?

【问题讨论】:

    标签: mysql sql left-join greatest-n-per-group


    【解决方案1】:

    不知道你的架构就无法给出准确的答案,但本质上你想得到groupwise minimum

    SELECT *
    FROM   Article LEFT JOIN (
             Images NATURAL JOIN (
               SELECT   article_id, MIN(position) AS position
               FROM     Images
               GROUP BY article_id
             ) AS t
           ) USING (article_id)
    

    【讨论】:

    • @Tarik 这里sqlfiddle.com/#!2/cbe2d/8 都设置了你的两个查询,只是为了反映实际的模式命名/结构而略有改变,否则作为原始,两者似乎都被破坏了(只是取消注释运行)
    • 甜蜜,就像一个魅力我看到你在最后一行基本上将 USING 更改为 ON,这是导致问题的原因。谢谢,拉了我一些头发。
    • @grants:是的,您的问题中没有Article 表的结构,我最初认为它有一个标题为article_id 而不是id 的列。
    【解决方案2】:
    SELECT * FROM ARTICLES AS art
    LEFT JOIN
     (SELECT article_id, image_id,
                     MIN(Position) AS Position
       FROM Images
       GROUP BY article_id, image_id) AS MinPos
     LEFT JOIN Images AS img ON
    MinPos.article_id = img.article_id AND
    MinPos.image_id = img.image_id
    

    【讨论】:

    • 无法测试我的查询。请在 sqlfiddle.com 中发布表架构和数据。
    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2018-12-01
    • 2021-08-18
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多