【问题标题】:Use an UPDATE on a SELECT in the same query在同一查询中对 SELECT 使用 UPDATE
【发布时间】:2021-11-19 15:23:54
【问题描述】:

我目前在 MS Access 中使用两个查询将数据插入我的表 OM_Extract。

查询 1:

INSERT INTO OM_Extract (cod, type, name, level)
SELECT table1.cod, table1.type, table2.name, table2.level
FROM table1 INNER JOIN table2 ON table1.cod = table2.cod;

查询 2:

UPDATE OM_Extract INNER JOIN table3 ON OM_Extract.level = table3.level SET OM_Extract.region = table3.region, OM_Extract.description = table3.description;

我正在使用的 VB 应用程序中从最终表 (OM_Extract) 中获取数据,但我现在这样做的方式是,它迫使我始终在 Access 中运行 AutoExec 宏,以便我的 OM_Extract表已更新。

我想创建一个不向表中插入数据的查询,因此我可以在我的 VB 应用程序中直接从该查询中获取数据。

应该是这样的:

UPDATE

SELECT table1.cod, table1.type, table2.name, table2.level AS OM_Extract
FROM table1 INNER JOIN table2 ON table1.cod = table2.cod

INNER JOIN table3 ON OM_Extract.level = table3.level SET OM_Extract.region = table3.region, OM_Extract.description = table3.description;

我该怎么做?

【问题讨论】:

  • 至少我不明白你想要完成什么。插入数据时,更新 OM_Extract 表...不需要 AutoExec。

标签: sql ms-access


【解决方案1】:

您似乎正试图从规范化的表结构中提取数据。在这种情况下,无需更新。如果要更新表 2 中的数据,请使用单独的更新查询。因此,甚至不需要参考 Table2.level 或 Table2.region,我将它们排除在示例之外。 假设:

'resulting sql for saved query OM_Extract
'either just call the saved function or duplicate the sql

SELECT Table1.cod, Table1.type, Table2.table2name AS name, Table2.level, Table3.region, Table3.description
FROM (Table1 INNER JOIN Table2 ON Table1.cod = Table2.cod) INNER JOIN Table3 ON Table2.level = Table3.level;

注意事项: name 是 access 中的保留字。一种处理方法是将名称更改为访问表中的其他名称,然后再转换回名称。

我们假设使用 INNER JOINS 没有丢失数据。根据实际情况,我们可能会使用其他连接和/或将列包装在 nz 函数中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多