Я выполняю простой запрос с соединением, подобным
SELECT t1.a, t2.b FROM t1 LEFT JOIN t2 ON ... LIMIT 5
Как t1
много строки в t2
(любое число выше 2), оператор LIMIT не возвращает первые 5 строк из t1
и соответствующие записи от t2
, но 5 строк, которые обычно включают 2-3 строки от t1
.
Как я могу записать этот запрос для получения первых 5 строк от t1
и соответствующие записи от t2
?
Использование MySQL 5.0.45.
SELECT t3.a, t2.b FROM (SELECT * FROM t1 LIMIT 5) t3
LEFT JOIN t2 ON ...
Обратите внимание, что если вы используете лимит без пункта 'order by', то не определено, какие 5 строк вы получите. Подумайте о добавлении пункта 'order by', если это не то, что Вам нужно.
Это классический запрос на пагинацию. Предлагаю разбить его на два запроса:
SELECT DISTINCT t1.id FROM t1 LEFT JOIN t2 ON ... LIMIT 5
Возьмите эти идентификаторы и поместите их в следующий запрос:
SELECT t1.a, t2.b FROM t1 LEFT JOIN t2 ON ... WHERE t1.id IN (?,?,?,?,?)
Я думаю, что это поможет:
SELECT t1.a, (SELECT t2.b FROM t2 WHERE t2... = t1...) AS b FROM t1 LIMIT 5
Вы можете группировать его по уникальной колонке в T1:
SELECT * FROM t1 JOIN t2 ON ... GROUP BY t1.id LIMIT 5
, но вам нужен таблица T2, чтобы быть в определенном порядке?