从另一个表更新但加入计算列

时间:2021-01-11 21:28:33

标签: mysql

表A有三列; IP 地址 (varchar)、实验室 ID (int) 和来源 (int)。

表B有两列;一个 ID(int) 和 labName(varchar)

labName 是表 B,它由 A 中的 IP 地址'第一个八位字节组成。例如,如果 IP 是 192.168.5.18,那么就会有一个实验室名称'lab 192'。我需要做的是使用表 B 中的匹配 ID 更新表 A 的 labID 列。

我已经完成了从 IP 构建实验室名称的解析:

我不知道该怎么做是基于该计算字段的更新。下面的代码不起作用,但我希望它可以解释我正在尝试做的事情:

UPDATE tableA
SET labID = (
    SELECT labName
    FROM tableB
    WHERE labName = concat(‘lab ‘, substring_index(ip, “.”, 1)
)
WHERE origin = 3

1 个答案:

答案 0 :(得分:1)

MySQL 将允许您使用 UPDATE syntax 中的 ON 的连接在连接的 table_reference 子句中调用函数(或任何表达式)

UPDATE
  tableA
  -- Join on the IP substring expression
  INNER JOIN tableB ON tableB.labName = CONCAT('lab ', substring_index(tableA.ip, '.', 1))
-- Set labID to tableB ID
SET tableA.labID = tableB.ID
WHERE origin = 3