【问题标题】:using SELECT inside an UPDATE query在 UPDATE 查询中使用 SELECT
【发布时间】:2010-12-18 17:11:25
【问题描述】:

我试过做这个查询,但它不起作用...谁能帮帮我

(SELECT (r.fare-r.fare*(t.discount/100)) FROM ccard AS c, downer AS d, 
    typepolicy AS t, 
rates AS r
WHERE c.cardno=Enter_card_no and d.deviceno=Enter_device_no and 
    d.routeno=r.routeno and c.type=t.type );

UPDATE bank 
SET amount = amount-[the_result of above select query]
WHERE accountno=(select c.accountno from ccard c where cardno=Enter_card_no);

所以我试着做

UPDATE bank 
SET amount = amount-(SELECT (r.fare-r.fare*(t.discount/100)) FROM ccard AS c, 
    downer AS d, typepolicy AS t, rates AS r
WHERE c.cardno=Enter_card_no and d.deviceno=Enter_device_no and 
    d.routeno=r.routeno and c.type=t.type )
WHERE accountno=(select c.accountno from ccard c where cardno=Enter_card_no);

但它给出了一个错误

“操作必须使用可更新的查询”

【问题讨论】:

  • 我没有弄明白你的子选择,但你确定你不能从 JOIN 相关的表中的源数据中检索值吗?如果您使用它,您可以尝试使用 Access/Jet/ACE DISTINCTROW 谓词来尝试强制更新。否则,临时表可能是唯一的解决方案。

标签: sql ms-access select


【解决方案1】:

首先,关于查询可更新性,如果您使用 WHERE 子句连接表,则查询将不可更新。例如,而不是

FROM downer AS d, rates AS r
WHERE d.routeno=r.routeno

你应该使用

FROM downer AS d INNER JOIN rates AS r ON d.routeno=r.routeno

第二,[bank] 是单行表吗?还是您真的要将金额列设置为所有行的相同值?

第三,在不知道如何连接示例中的所有表的情况下,不可能编写可更新的查询来执行您想要的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多