表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
答案 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