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

Posted

技术标签:

【中文标题】如何使用加入从选择中更新【英文标题】:How to update from select with a Join 【发布时间】:2011-12-16 12:02:36 【问题描述】:

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

我正在尝试使用每个 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 抛出了一个

错误代码:1093。您不能在 FROM 子句中指定目标表 'invoiceLine' 进行更新

【问题讨论】:

How to use JOIN in UPDATE query?的可能重复 【参考方案1】:
UPDATE invoiceLine SET network = (
    SELECT label FROM network WHERE id = (
        SELECT network FROM terminal WHERE terminal.ctn = invoiceLine.ctn
    )
)

【讨论】:

【参考方案2】:
UPDATE invoiceLine
    INNER JOIN terminal
        ON invoiceLine.ctn = terminal.ctn
    INNER JOIN network
        ON terminal.network = network.id
    SET invoiceLine.network = network.label

【讨论】:

工作愉快...谢谢 :-) - 将在 6 分钟内接受您的回答,当我允许的时候! 而 WHERE 和 LIMIT 关键字将放在 SET 关键字之后。

以上是关于如何使用加入从选择中更新的主要内容,如果未能解决你的问题,请参考以下文章

从 DropdownItems 中选择值后,DropdownButton 值未更新。如何使用 selectedValue 更新默认值?

如何使用从图库中选择的新图像更新列表视图 [重复]

如何使用 PHP(和 HTML)从 SQLite 中选择、插入、更新和删除数据

如何使用从 Swift 3 中的滑块中选择的 JSON 数据更新 tableviewcell?

如何在单个 lambda 表达式中同时使用更新和加入 [关闭]

如何从sql中的两个表之一中搜索