代码之家  ›  专栏  ›  技术社区  ›  Robert Munteanu

限制一个表中的行数的SQL查询,而不是结果集

  •  5
  • Robert Munteanu  · 技术社区  · 14 年前

    我正在运行一个带有联接的简单查询,类似于

    SELECT t1.a, t2.b FROM t1 LEFT JOIN t2 ON ... LIMIT 5
    

    AS t1 有很多行 t2 (任何大于2的数字)limit语句不返回 T1 以及相应的条目 t2 ,但5行通常包括2-3行 T1 .

    如何编写此查询以获取前5行 T1 以及相应的条目 T2 ?


    使用MySQL5.0.45。

    4 回复  |  直到 14 年前
        1
  •  7
  •   Mark Byers    14 年前
    SELECT t3.a, t2.b FROM (SELECT * FROM t1 LIMIT 5) t3
    LEFT JOIN t2 ON ...
    

    请注意,如果使用limit而不使用“order by”子句,则不会定义将获得哪5行。如果这不是您想要的,请考虑添加“order by”子句。

        2
  •  2
  •   hobodave    14 年前

    这是一个经典的分页查询。我建议将其分为两个问题:

    SELECT DISTINCT t1.id FROM t1 LEFT JOIN t2 ON ... LIMIT 5
    

    获取这些ID并将其放入以下查询中:

    SELECT t1.a, t2.b FROM t1 LEFT JOIN t2 ON ... WHERE t1.id IN (?,?,?,?,?) 
    
        3
  •  0
  •   Anax    14 年前

    我相信以下几点可以做到:

    SELECT t1.a, (SELECT t2.b FROM t2 WHERE t2... = t1...) AS b FROM t1 LIMIT 5
    
        4
  •  0
  •   TimoSolo Horshack    14 年前

    您可以按T1中的唯一列对其进行分组:

    SELECT * FROM t1 JOIN t2 ON ... GROUP BY t1.id LIMIT 5
    

    但是你需要t2表按特定的顺序排列吗?