SQL-запрос с пределом на строки от одной таблицы, не набор результатов

Я выполняю простой запрос с соединением, подобным

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.

5
задан Robert Munteanu 18 January 2010 в 09:12
поделиться

4 ответа

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

Обратите внимание, что если вы используете лимит без пункта 'order by', то не определено, какие 5 строк вы получите. Подумайте о добавлении пункта 'order by', если это не то, что Вам нужно.

7
ответ дан 14 December 2019 в 01:08
поделиться

Это классический запрос на пагинацию. Предлагаю разбить его на два запроса:

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 (?,?,?,?,?) 
2
ответ дан 14 December 2019 в 01:08
поделиться

Я думаю, что это поможет:

SELECT t1.a, (SELECT t2.b FROM t2 WHERE t2... = t1...) AS b FROM t1 LIMIT 5
0
ответ дан 14 December 2019 в 01:08
поделиться

Вы можете группировать его по уникальной колонке в T1:

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

, но вам нужен таблица T2, чтобы быть в определенном порядке?

0
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: