sqlite3 模块中的 ROW_NUMBER 函数

Posted

技术标签:

【中文标题】sqlite3 模块中的 ROW_NUMBER 函数【英文标题】:ROW_NUMBER function in sqlite3 module 【发布时间】:2019-08-06 00:50:24 【问题描述】:

我正在使用 node.js 中的 sqlite3 模块来创建 sqlite 数据库并与之交互,并且正在尝试使用 ROW_NUMBER 函数,但我似乎无法让它工作并且想知道是否可能函数甚至存在于 sqlite 中,就像它在 SQL 中一样。

    client.db.each('SELECT ROW_NUMBER() OVER (ORDER BY guildbank DESC LIMIT 10) rownum, guildname, guildbank FROM guilds', [], (err, row1) => 
    if(err) 
        console.error(err.message)
    
    if(row1.guildname == message.guild.name) istopten = true
    embed.addField(`$row1.rownum. $row1.guildname`, `has $row1.guildbank yen in their guild bank!`)
    if(istopten) 
        client.db.each('SELECT ROW_NUMBER() OVER (ORDER BY guildbank) rownum, guildname, guildbank FROM guilds', [], (err, row2) => 
            if(err) 
                console.error(err.message)
            
            if(row2.guildname == message.guild.name) embed.setFooter(`Your guild is in `)
        )
    
)

我得到的错误是引用 row1 没有 guildname 属性,我得出的结论是我的查询是错误的原因。任何帮助将不胜感激。

编辑:

SQLITE_ERROR: near "LIMIT": syntax error
C:\Users\Adam\Desktop\projects\yabe-reworked\Coding-Yabe-Sei\node_modules\sqlite3\lib\trace.js:27
                    throw err;
                    ^

TypeError: Cannot read property 'guildname' of undefined
    at client.db.each (C:\Users\Adam\Desktop\projects\yabe-reworked\Coding-Yabe-Sei\commands\economy\leaderboard.js:11:17)

是错误的相关部分

【问题讨论】:

表及其名称都设置正确,我知道这很重要 错误信息是什么(如果有),它是否抱怨 ROW_NUMBER 不是一个有效的函数? @TimBiegeleisen 已编辑错误的相关部分,感谢您指出我应该这样做 这些看起来是 javascript 错误,但这并不意味着您的 SQL 是有效的。要测试有效的 SQL,请尝试直接针对 SQLite 运行。 【参考方案1】:

我的愚蠢错误,老实说我应该更清楚,不能将 LIMIT 10 放在 ROW_NUMBER 函数中,你必须把它放在查询的末尾。感谢您的想法:)

【讨论】:

以上是关于sqlite3 模块中的 ROW_NUMBER 函数的主要内容,如果未能解决你的问题,请参考以下文章

如果不使用 sqlite 中的 row_number() 函数,如何提供相同的函数?

python内置的sqlite3模块,使用其内置数据库

错误是:没有名为 sqlite3 的模块

电子应用程序找不到 sqlite3 模块

SQLite3+Qt开发SQLite3简要介绍+在Qt5中的使用步骤

Python3教程:数据库模块(sqlite3,SQLite3)的运用