【问题标题】:Insert returns error: (sub-select returns 6 columns - expected 1)插入返回错误:(子选择返回 6 列 - 预期为 1)
【发布时间】:2017-12-04 22:12:50
【问题描述】:

我有一个表 SIGHTINGS(NAME, PERSON, LOCATION, SIGHTED),我正在尝试使用以下查询在该表中插入一个新行:

INSERT INTO SIGHTINGS (NAME, PERSON, LOCATION, SIGHTED)
VALUES ('Douglas dustymaiden', 'Person B', 'Double Mountain', '2005-11-28');

但它返回此错误:

[2017-12-04 17:08:18] [1] [SQLITE_ERROR] SQL error or missing database (sub-select returns 6 columns - expected 1)

我查找了 sqlite 插入 here 的正确语法,据我所知,插入是正确编写的。有人能告诉我为什么它会抛出这个错误而不是插入吗?如果这有助于发现任何问题,我正在使用 DataGrip 2017。

编辑:

这是我添加到数据库的触发器。插入无需触发器即可工作。

CREATE TRIGGER SightingLocationError
  BEFORE INSERT ON SIGHTINGS
  FOR EACH ROW
  WHEN NEW.LOCATION NOT IN FEATURES
BEGIN
  SELECT RAISE(ABORT, 'Error: Insert into the SIGHTINGS table references location that is not found in the database.');
END;

【问题讨论】:

  • 如果您对触发器保密,我们将无法帮助您。
  • @CL。我不知道触发器会导致错误。我在没有触发器的数据库副本上对其进行了测试,但它仍然抛出了同样的错误。我将在上面发布触发器。
  • @CL。抱歉,我在测试时复制了错误的数据库。插入在没有触发器的情况下工作。
  • @CL。如果我的触发器抛出错误,它不会从 RAISE(ABORT, 'message') 函数中打印出错误消息吗?

标签: sqlite


【解决方案1】:
WHEN NEW.LOCATION NOT IN FEATURES

FEATURES 表有六列,因此数据库不知道它应该如何搜索位置值。

使用显式子查询返回您要用于此目的的列:

WHEN NEW.LOCATION NOT IN (SELECT xxx FROM FEATURES)

【讨论】:

  • 谢谢!那行得通。我应该注意到这一点。盯着这个屏幕太久了lol
猜你喜欢
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 2019-12-17
相关资源
最近更新 更多