2013-10-24 43 views
1

我有两个表,Article和Image与一对多其中Article是父项,Image有外键列article_id。每个图像也有positioninteger与左连接的sql最小值

现在我需要的是我得到所有的文章,无论是否有任何图像,但对于那些有一个或多个图像的人来说,它需要返回存储了最低位置的单个图像在position列。

在沿着伪线换句话说:

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

什么SQL查询来获取上面?

回答

0

一个无法给出一个确切的答案不知道你的模式,但在本质上,你想要得到的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) 
+0

@Tarik http://sqlfiddle.com/#!2/cbe2d/8所有设置与您的两个查询略有改变,以反映实际的架构命名/结构,否则作为原始,似乎都被打破(只是取消注释运行) – grants

+0

@grants:请参见[sqlfiddle](http:// sqlfiddle.com/#!2/cbe2d/9/0)。 – eggyal

+0

甜,作品像一个魅力,我看到你在最后一行基本上改变了USING到ON,这是造成这个问题。谢谢,拉了我一下头发。 – grants

0
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 
+0

无法测试我的查询。请在sqlfiddle.com上发布表格模式和数据。 – Tarik