繁体   English   中英

mysql加入限制1

[英]mysql join with limit 1

假设我有一对多关系的两个表。

并且,我想从每个主记录中选择列以及相关表中的第一个记录。

我尝试了一些方法,但它只是没有...

在这里,我最终得到了这个SQL小提琴:

http://sqlfiddle.com/#!2/39fdb/3

问题在于它无法从子选择中引用a.ID。

当然,这不起作用,但这只是我能想到的

select a.*,b.* from event a left join 
(select * from event_pictures where a.ID=article limit 1)
b on a.ID=b.article;

关于如何修复它的任何想法?

不,你不能引用a.ID在被加入到子选择a 您可以执行以下操作,但最好提供订购。 否则,没有“第一”行。 将选择表b中的(或多或少)随机行:

select a.*, b.* 
from event a 
  left join event_pictures b
    on b.PK =                        --- the PRIMARY KEY
       ( select bb.PK                --- of event_pictures 
         from event_pictures bb 
         where a.ID = bb.article
         ORDER BY bb.something 
         limit 1
       ) ;

如果您不关心文章返回哪个图像,您可以在子查询中选择按文章分组的MINMAX图像(而不是做LIMIT 1

SQL小提琴

您可以使用已建议的最小值或最大值:

select
    e.*,
    (
        select min(ep.img)
        from event_pictures as ep
        where ep2.article = e.article
    ) as img
from
    event as e

如果你想要基于最高ID的img:

select
    e.*,
    (
        select ep2.img
        from event_pictures as ep2
        where ep2.ID = last_ep.last_ID
    ) as img
from
    event as e inner join -- could be a left join if necessary
    (
        select ep.article, max(ep.ID) as last_ID
        from event_pictures as ep
        group by ep.article
    ) as last_ep
        on last_ep.article = e.ID

这两种方法都不需要使用limit

这是一种方法:

select e.*, ep.*
from (select e.*,
             (select article
              from event_pictures ep
              where ep.article = e.id
              order by rand()
              limit 1
             ) as eparticle
      from event e
     ) e left join
     event_pictures ep
     on e.eparticle = ep.article

子查询找到一个randome“文章”。 然后加入相关信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM