mysql - 如何使用加入从选择中更新

标签 mysql sql join select sql-update

如何更新子查询中也存在的表?我必须分两个阶段进行吗? (创建一个临时表——将选中的数据放入其中,然后更新最终表)

我正在尝试使用每个 CTN 的网络标签更新 invoiceLine 表。

最终结果是:

  • 发票行

    ctn       network
    1234      network1
    2345      network2
    3456      network1
    

我有以下表格:

  • 发票行

    ctn       network
    1234      null
    2345      null
    3456      null
    
  • 终端

    ctn       network
    1234      1
    2345      2
    3456      1
    
  • 网络

    id        label
    1         network1
    2         network2
    

我可以运行选择,但我不确定如何使用连接更新:

update invoiceLine 
inner join terminal on terminal.ctn = invoiceLine.ctn 
set invoiceLine.network = 
(
  select network.label 
  from invoiceLine 
  inner join terminal on terminal.ctn = invoiceLine.ctn 
  inner join network on network.id = terminal.network
) 
where invoiceLine.ctn = terminal.ctn

但是 MySQL 抛出一个

Error Code: 1093. You can't specify target table 'invoiceLine' for update in FROM clause

最佳答案

UPDATE invoiceLine
    INNER JOIN terminal
        ON invoiceLine.ctn = terminal.ctn
    INNER JOIN network
        ON terminal.network = network.id
    SET invoiceLine.network = network.label

关于mysql - 如何使用加入从选择中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916186/

相关文章:

Mysql,数据分布在两个表中,单独的行

php - 如何清理 PHP 中的搜索栏字符串

mysql - WordPress 查询帮助

mysql - 如何通过命令行将MySQL临时设置为只读?

c# - SqlBulkCopy 插入顺序

java - hibernate 无故插入

sql - 如何通过坐标和方位角在PostGis中创建饼楔(扇区)?

SQL Server 连接 : Are 'JOIN' Statements 'LEFT OUTER' Associated by Default in SQL Server?

MySQL-更改多行日期

MySQL从Memory表删除连接InnoDB表