我有这个数据库查询
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而不限制整个结果集。
我该如何撰写查询?
答案 0 :(得分:13)
如果你考虑一下你想要做什么,你实际上并没有针对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
答案 1 :(得分:0)
嗯,我认为你的意思是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
答案 2 :(得分:0)
这是另一种可能的方法:
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
未经测试。如果您遇到问题,请告诉我 - 我可以详细说明。