如何为每个外键选择有限数量的行?

时间:2010-04-07 05:11:36

标签: sql mysql

我有这张桌子:

id
feed_id
...

假设我有500行,我想为每个feed_id选择3个条目?总数上限为50。

如何编写此SQL?

4 个答案:

答案 0 :(得分:3)

您是否尝试过使用子选择并限制?

这样的东西
SELECT  *
FROM    Table t
WHERE   ID IN (SELECT ID FROM @Table WHERE FEED_ID = t.FEED_ID LIMIT 3)
LIMIT 500

答案 1 :(得分:3)

使用:

SELECT x.feedid
  FROM (SELECT t.feedid,
               CASE WHEN @feed != t.feedid THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank,
               @feed := t.feedid
          FROM TABLE t
          JOIN (SELECT @rownum := NULL, @feed := 0) r
      ORDER BY t.feedid) x
 WHERE x.rank <= 3
 ORDER BY x.feedid
 LIMIT 50

不清楚的是您要返回的内容的详细信息 - 表格中的所有行,或者只是Feedid。

答案 2 :(得分:0)

在transact SQL中你会使用TOP语句,不确定这是否适用于此......

答案 3 :(得分:0)

您可以借助存储过程来完成此操作。

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_feed`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a INT;
DECLARE cur1 CURSOR FOR SELECT id FROM test.id LIMIT 50;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO a;
    IF NOT done THEN
        SELECT * FROM feed_id WHERE id=a LIMIT 3;               
    END IF;
UNTIL done END REPEAT;
CLOSE cur1;

END$$
DELIMITER;