如何在MySql表中选择每一行N次?

时间:2014-03-06 07:28:22

标签: mysql sql select

我有一个像下面这样的MySQL表。

ID         NAME          SURNAME
1          Joe           Black
2          Mary          Peterson
3          Bob           Marley
4          Andy          Murray
...

我想写一个 SELECT 命令,它会返回 N 次的每一行。
N = 3的例子。

SELECT NAME, SURNAME  blah-blah (3 Times ) FROM Person
NAME              SURNAME
Joe               Black
Joe               Black
Joe               Black
Mary              Peterson
Mary              Peterson
Mary              Peterson
Bob               Marley
Bob               Marley
Bob               Marley
Andy              Murray
Andy              Murray

谢谢。

5 个答案:

答案 0 :(得分:2)

您可以使用UNION ALL来获得所需的结果,但最好不要使用SQL做这样的工作。

SELECT * FROM
(
  SELECT NAME, SURNAME FROM Person
  UNION ALL
  SELECT NAME, SURNAME FROM Person
  UNION ALL
  SELECT NAME, SURNAME FROM Person
) A ORDER BY NAME

答案 1 :(得分:1)

愚蠢的手动方式是:

SELECT NAME, SURNAME FROM Person
UNION ALL
SELECT NAME, SURNAME FROM Person
UNION ALL
SELECT NAME, SURNAME FROM Person

另一种方法是让一个包含数字的表格在一个列中运行到最大值并与它进行交叉连接WHERE number <= n

答案 2 :(得分:1)

我不建议使用sql来实现这个目标,这是一种更简单的方式(假设PHP ):

$result = $mysqli->query("SELECT NAME, SURNAME  blah-blah (3 Times ) FROM Person");

while($result_set = $result->fetch_array())
{

   for($i=0;$i<4;$i++)
   {
     echo $result_set['name']." ".$result_set['sur_name']."\n";
   }
}

这将为您提供更好地控制结果集,并且您可以拥有更多动态处理方式,数据在页面上的显示方式,

作为。例如,如果你想要一个特定的名字只打印一次,那么简单的if比较会做,这是不可能通过sql !!

答案 3 :(得分:1)

SELECT NAME, SURNAME FROM Person, (SELECT * FROM Person limit 3) count_table;

答案 4 :(得分:1)

如何在存储过程中循环它,如:

 delimiter //
 CREATE PROCEDURE ntimes()
 BEGIN
 DECLARE i INT DEFAULT 0;
 SET i = 0;
 WHILE i < 3 DO   
 SELECT `Code`, `Rank`  FROM Table1;
 SET i = i + 1;
 END WHILE;
 END;
 //
 DELIMITER ;

在这里你只需要改变3到你想要的重复次数,你就不需要大量的工会。