MySQL语法错误排查:HackerRank直角三角形打印问题
MySQL直角三角形打印SQL语法错误排查及修正
你的代码是SQL Server语法,但HackerRank使用的是MySQL,两者语法存在多处差异,导致报错,具体问题及修正如下:
核心语法差异及错误点
- 变量与赋值:
MySQL中会话变量用@var标识,赋值需用SET @var = 1;,而非Select @var=1;若用局部变量,需放在BEGIN...END块开头且无需@前缀。 - 循环结构:
MySQL的WHILE循环语法为WHILE 条件 DO ... END WHILE;,而非SQL Server的WHILE ... BEGIN ... END。 - 字符串重复函数:
MySQL中实现字符串重复的函数是REPEAT(str, count),不是SQL Server的REPLICATE()。 - 输出语句:
MySQL没有PRINT命令,需用SELECT语句输出内容。
修正后的代码方案
方案1:递归CTE(推荐,无需存储过程)
递归CTE是HackerRank场景下更简洁的写法,无需变量和循环:
WITH RECURSIVE triangle AS ( SELECT 1 AS n UNION ALL SELECT n + 1 FROM triangle WHERE n < 5 ) SELECT REPEAT('* ', n) FROM triangle;
方案2:会话变量+WHILE循环
若偏好循环写法,可使用会话变量实现:
SET @var = 1; WHILE @var < 6 DO SELECT REPEAT('* ', @var); SET @var = @var + 1; END WHILE;
方案3:存储过程写法
如果环境要求必须用局部变量,可封装为存储过程:
DELIMITER // CREATE PROCEDURE print_right_triangle() BEGIN DECLARE var INT DEFAULT 1; WHILE var < 6 DO SELECT REPEAT('* ', var); SET var = var + 1; END WHILE; END // DELIMITER ; CALL print_right_triangle();
内容的提问来源于stack exchange,提问作者Akash Paul
相关产品推荐
相关产品推荐

