Внутреннее соединение MySQL с LIMIT для левой таблицы - PullRequest
7 голосов
/ 26 февраля 2011

У меня есть запрос к этой базе данных

SELECT *
FROM (`metadata` im)
INNER JOIN `content` ic ON `im`.`rev_id`  = `ic`.`rev_id`
WHERE `im`.`id` = '00039'
AND `current_revision` = 1
ORDER BY `timestamp` DESC
LIMIT 5, 5 

Запрос ограничивает общее количество строк в результате до 5. Я хочу ограничить левую таблицу metadata до 5 без ограничения всего набора результатов.

Как мне написать запрос?

Ответы [ 3 ]

13 голосов
/ 26 февраля 2011

Если вы думаете о том, что вы пытаетесь сделать, вы на самом деле не делаете выбор против metadata.

Сначала нужно выполнить подзапрос.

Попробуйте:

SELECT *
FROM ((select * from metadata limit 5) im)
INNER JOIN `content` ic ON `im`.`rev_id`  = `ic`.`rev_id`
WHERE `im`.`id` = '00039'
AND `current_revision` = 1
ORDER BY `timestamp` DESC
0 голосов
/ 16 августа 2014

Вот еще один возможный подход:

SET @serial=0;
SET @thisid=0;

SELECT 
   @serial := IF((@thisid != im.id), @serial + 1, @serial), 
   @thisid := im.id,
   * 
FROM (`metadata` im)
WHERE `im`.`id` = '00039'
AND `current_revision` = 1
AND @serial < 5
ORDER BY `timestamp` DESC

Это не проверено.Пожалуйста, дайте мне знать, если у вас возникнут проблемы с реализацией этого - и я могу уточнить.

0 голосов
/ 26 февраля 2011

Ну, я думаю, вы имеете в виду LEFT JOIN попробуйте использовать LEFT JOIN вместо INNER JOIN

    SELECT DISTINCT *
    FROM (`metadata` im)
    INNER JOIN `content` ic ON `im`.`rev_id`  = `ic`.`rev_id`
    WHERE `im`.`id` = '00039'
    AND `current_revision` = 1
    ORDER BY `timestamp` DESC
    LIMIT 5, 5 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...