【问题标题】:Why do I get an "ambiguous column name: account.accrued"?为什么我会收到“不明确的列名:account.accrued”?
【发布时间】:2021-06-20 04:22:57
【问题描述】:

我正在尝试执行 SQLite 查询以更新帐户表中的列:

UPDATE account SET accrued = (account.accrued + ((product.intrate/365)*balance))
FROM account
JOIN customer ON customer.custid = account.custid
JOIN product ON product.prodid = account.prodid
WHERE active = 1

这个我试过了,结果出来了

不明确的列名:account.accrued

UPDATE a SET accrued = (a.accrued + ((p.intrate/365)*balance))
FROM account a
JOIN customer c ON c.custid = a.custid
JOIN product p ON p.prodid = a.prodid
WHERE active = 1

我也试过那个查询,但结果没有这样的表a。如果我取出计算中产生的列,那么余额列会出现相同的错误。

累积的列仅在一个表中,account

【问题讨论】:

  • 你的 SQLite 版本是什么?
  • 用于 SQLite 版本 3.12.1 的数据库浏览器,这就是我正在使用的

标签: sqlite


【解决方案1】:

这是 SQLite 的正确语法:

UPDATE account AS a 
SET accrued = (a.accrued + ((p.intrate/365)*balance))
FROM customer c JOIN product p 
ON p.prodid = a.prodid
WHERE c.custid = a.custid AND active = 1

请注意,您应该使用表名/别名来限定所有列名(SET 之后更新的列除外)以避免歧义。

【讨论】:

  • 看来效果不错,谢谢
  • 嗨,我想知道您是否可以帮助将其添加到我的 Windows 窗体应用程序中?我更新了问题以包含它谢谢
  • @adrian38 我无法帮助您处理 Windows 窗体。但是从语法错误来看,我相信您的应用程序使用了旧版本的 SQLite,它不支持 UPDATE 语句中的 FROM 子句。该查询可能在 DB Browser for SQLite 中工作,因为它使用 SQLite 3.33.0 此外,不要在现有问题中添加新要求。这样做会使您接受的答案无效。
猜你喜欢
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多