对黑客等级进行故障排除时,WITH RECURSIVE中出错



总结黑客银行问题

(1(绘制三角形1

p(5(:

* * * * * 
* * * * 
* * * 
* * 
*

这是一个例子,我必须制作这个p(20(

WITH RECURSIVE stars (n,star) AS(
SELECT 39,LEFT('* * * * * * * * * * * * * * * * * * * *',39)
UNION ALL

SELECT n-2,LEFT('* * * * * * * * * * * * * * * * * * * *',n-2)
FROM stars
WHERE n>1 
)
SELECT star
FROM stars

我用这种方法解决了绘制三角形1的问题。

(2(绘制三角形2

p(5(:

* 
* * 
* * * 
* * * * 
* * * * *

这是一个例子,我必须制作这个p(20(

然而,这在Draw THE Triangle 2 中不起作用

WITH RECURSIVE stars (n,star) AS(
SELECT 1, LEFT('* * * * * * * * * * * * * * * * * * * *',1)
UNION ALL
SELECT n+2, LEFT('* * * * * * * * * * * * * * * * * * * *',n+2)
FROM stars
WHERE n<38
)
SELECT star
FROM stars
WITH RECURSIVE stars (n,star) AS(
SELECT 1,'*'
UNION ALL
SELECT n+1, CONCAT(star,' *')
FROM stars
WHERE n<20
)
SELECT star
FROM stars

我试着像Triange 1一样更改数字来使用LEFT((,但HackerBank网站在第1行显示了一条类似"ERROR 1406(22001(:第1行"star"列的数据太长"的消息。在我的个人mysql中,我只得到了OK,但我看不到结果表。

如果数据太长,这是一个错误,我不应该在第一个问题中遇到同样的错误吗?

有什么我不知道的吗?

仔细查看"三角形1";以及";三角形2";。

有什么区别?没错;三角形2";查询的顺序相反。

查询中的";三角形1";定义行的顺序?没错,它是n

我如何修改"的查询;三角形1";以便它以相反的顺序输出行?没错,因为第一行的n的值是39,最后一行的值是1(行按n降序排列(,所以只需通过添加ORDER BY n来反转行的顺序。

因此查询";三角形2";应该看起来像

WITH RECURSIVE stars(n, star) AS(
SELECT 39, LEFT('* * * * * * * * * * * * * * * * * * * *', 39)
UNION ALL    
SELECT n-2, LEFT('* * * * * * * * * * * * * * * * * * * *', n-2)
FROM stars
WHERE n > 1 
)
SELECT star
FROM stars
ORDER BY n

只需检查

最新更新