【问题标题】:SQL update based on column in other table基于其他表中的列的 SQL 更新
【发布时间】:2014-08-28 21:01:16
【问题描述】:

使用 SQLite,我正在尝试根据另一个表(两列)更新三列

三列是(表1): '代理创建 ID' 'AgentOwnedID' 'AgentSentID'

另一个表(Table2)由“AgentID”和“Designation”组成。

如果三列之一中的 ID 与第二个表中的“AgentID”匹配,我希望填充“Designation”值。此表是所有唯一 ID 和相应名称的列表。每行数据都有一个 Creator、Owner 和 Sender。我需要看看那个人是哪个部门的。

在 Access 中,第一个值看起来像这样。我还需要添加其他两个值。 更新表1 LEFT JOIN Table2 ON Table1.AgentCreatedID = Table2.AgentID SET raw.AgentCreatedID = [ Table2 ]![ 名称];

我不确定那是什么!命令是或如何在 SQLite 中使用。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    SQLite 不支持 UPDATE 语句中的连接。

    您必须使用相关子查询查找新值:

    UPDATE Table1
    SET AgentCreatedID = (SELECT Designation
                          FROM Table2
                          WHERE AgentID = AgentCreatedID),
        AgentOwnedID   = (SELECT Designation
                          FROM Table2
                          WHERE AgentID = AgentOwnedID),
        AgentSentID    = (SELECT Designation
                          FROM Table2
                          WHERE AgentID = AgentSentID)
    

    【讨论】:

    • 有没有办法在新列中执行此操作,而不是完全覆盖 AgentID 列?就像我可以先添加一个 ALTER TABLE 命令来在我的 Table1 上添加三个新列?然后像上面一样参考表2?
    • 是的,你可以做三个ALTER TABLE 语句。
    【解决方案2】:

    感叹号用于将工作表名称与该工作表中的引用分开。 Here is Microsoft对单元格引用的解释。

    现在您知道 [ Table2 ]![Designatio] 的含义,您可以将其简化为仅使用列名。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多