SQLite数据库中出现“行值错误”错误

ckx4rj1h  于 2022-11-15  发布在  SQLite
关注(0)|答案(5)|浏览(210)

我从一个无法找到任何参考资料的sqlite3查询中得到一个错误。谷歌搜索字符串让我深入了解SQLite代码本身,这是如此不透明,我无法理解它。
表架构:

CREATE TABLE quote (
    seqnum INTEGER,
    session STRING,
    timestamp_sip INTEGER,
    timestamp_1 INTEGER,
    market_center STRING,
    symbol STRING,
    bid_price INTEGER,
    bid_lots INTEGER,
    offer_price INTEGER,
    offer_lots INTEGER,
    flags INTEGER,
    PRIMARY KEY (symbol, seqnum) );

查询:

select (seqnum, session, timestamp_sip, timestamp_1, market_center, symbol)
    from quote
    where symbol = 'QQQ';

错误:
错误:行值使用不当
我不知道该怎么做。表中有大量数据与查询匹配:

sqlite> select count(*) from quote where symbol = 'QQQ';
2675931

有人能在这里提供一些指导吗?Sqlite版本为3.16.2。

tmb3ates

tmb3ates1#

不要紧。选择列周围的圆括号(复制/粘贴遗留下来的)就是问题所在。可能是糟糕的错误消息。但这是我的错。

k5hmc34c

k5hmc34c2#

我在使用Rails5.2应用程序时也遇到过类似的情况。
对于我的例子,我试图为应用程序中的一个模型编写一个搜索查询:

def self.search(params)
  applications = all.order('created_at DESC') # for not existing params args
  applications = applications.where("cast(id as text) like ?, email like ?, first_name like ?, last_name like ?, appref like ?", "#{params[:search]}", "%#{params[:search]}%", "#{params[:search]}", "#{params[:search]}", "#{params[:search]}",) if params[:search]
  applications
end

问题是我使用逗号(,)来分隔搜索参数,我只是改正了使用OR

def self.search(params)
  applications = all.order('created_at DESC') # for not existing params args
  applications = applications.where("cast(id as text) like ? OR email like ? OR first_name like ? OR last_name like ? OR appref like ?", "#{params[:search]}", "%#{params[:search]}%", "#{params[:search]}", "#{params[:search]}", "#{params[:search]}",) if params[:search]
  applications
end
vhmi4jdf

vhmi4jdf3#

我从查询中删除了方括号,它对我有效:FROMSELECT(Column1,Column2,...)从表选择列1、列2、...发自表格

suzh9iv8

suzh9iv84#

是的,这个错误发生在我的代码中,我发现了这个问题,但没有一个答案对我有帮助。
我通过*SELECT命令中的删除同一列修复了这个问题。

  • (这很愚蠢,因为如果列已经在Condition子命令中,我就不能选择该列。)*

这是问题SQL命令**(不要使用这个)**:

SELECT (`id`, `username`) FROM `users` WHERE `id` = 'someone_s id'

这是固定的SQL命令**(请使用此命令)**:

SELECT (`username`) FROM `users` WHERE `id` = 'someone_s id'
tjjdgumg

tjjdgumg5#

只是

select seqnum, session, timestamp_sip, timestamp_1, market_center, symbol
    from quote
    where symbol = 'QQQ';

那它就起作用了。

相关问题