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

时间:2010-01-18 09:12:05

标签: sql mysql join limit

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

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

由于t1t2中有许多行(任何数字大于2),LIMIT语句不会返回t1的前5行和来自t2的相应条目,但是5行,通常包括来自t1的2-3行。

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


使用MySQL 5.0.45。

4 个答案:

答案 0 :(得分:7)

SELECT t3.a, t2.b FROM (SELECT * FROM t1 LIMIT 5) t3
LEFT JOIN t2 ON ...

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

答案 1 :(得分:2)

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

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 (?,?,?,?,?) 

答案 2 :(得分:0)

我相信以下内容可以解决问题:

SELECT t1.a, (SELECT t2.b FROM t2 WHERE t2... = t1...) AS b FROM t1 LIMIT 5

答案 3 :(得分:0)

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

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

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