如何使用同一 table 中另一列的数据更新 table 中的列?
How do I update a column from a table with data from a another column from this same table?
我有一个 table "table1" 这样的:
+------+--------------------+
| id | barcode | lot |
+------+-------------+------+
| 0 | ABC-123-456 | |
| 1 | ABC-123-654 | |
| 2 | ABC-789-EFG | |
| 3 | ABC-456-EFG | |
+------+-------------+------+
我必须提取列中心的数字 "barcode",就像这个请求一样:
SELECT SUBSTR(barcode, 5, 3) AS ToExtract FROM table1;
结果:
+-----------+
| ToExtract |
+-----------+
| 123 |
| 123 |
| 789 |
| 456 |
+-----------+
并将其插入 "lot" 列。
UPDATE table1 SET Lot = SUBSTR(barcode, 5, 3)
-- WHERE ...;
按照
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
即你的情况
UPDATE table_name
SET lot = SUBSTR(barcode, 5, 3)
WHERE condition;(if any)
许多数据库支持生成(又名 "virtual"/"computed" 列)。这允许您将列 定义为表达式 。语法是这样的:
alter table table1 add column lot varchar(3) generated always as (SUBSTR(barcode, 5, 3))
使用生成的列有几个优点:
- 它始终是最新的。
- 一般不占用任何space。
- 创建 table 时没有开销(尽管查询 table 时有开销)。
我应该注意到语法在数据库之间略有不同。有些不需要类型说明。有些只使用 as
而不是 generated always as
.
CREATE TABLE Table1(id INT,barcode varchar(255),lot varchar(255))
INSERT INTO Table1 VALUES (0,'ABC-123-456',NULL),(1,'ABC-123-654',NULL),(2,'ABC-789-EFG',NULL)
,(3,'ABC-456-EFG',NULL)
UPDATE a
SET a.lot = SUBSTRING(b.barcode, 5, 3)
FROM Table1 a
INNER JOIN Table1 b ON a.id=b.id
WHERE a.lot IS NULL
id | barcode | lot
-: | :---------- | :--
0 | ABC-123-456 | 123
1 | ABC-123-654 | 123
2 | ABC-789-EFG | 789
3 | ABC-456-EFG | 456
db<>fiddle here
我有一个 table "table1" 这样的:
+------+--------------------+
| id | barcode | lot |
+------+-------------+------+
| 0 | ABC-123-456 | |
| 1 | ABC-123-654 | |
| 2 | ABC-789-EFG | |
| 3 | ABC-456-EFG | |
+------+-------------+------+
我必须提取列中心的数字 "barcode",就像这个请求一样:
SELECT SUBSTR(barcode, 5, 3) AS ToExtract FROM table1;
结果:
+-----------+
| ToExtract |
+-----------+
| 123 |
| 123 |
| 789 |
| 456 |
+-----------+
并将其插入 "lot" 列。
UPDATE table1 SET Lot = SUBSTR(barcode, 5, 3)
-- WHERE ...;
按照
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
即你的情况
UPDATE table_name
SET lot = SUBSTR(barcode, 5, 3)
WHERE condition;(if any)
许多数据库支持生成(又名 "virtual"/"computed" 列)。这允许您将列 定义为表达式 。语法是这样的:
alter table table1 add column lot varchar(3) generated always as (SUBSTR(barcode, 5, 3))
使用生成的列有几个优点:
- 它始终是最新的。
- 一般不占用任何space。
- 创建 table 时没有开销(尽管查询 table 时有开销)。
我应该注意到语法在数据库之间略有不同。有些不需要类型说明。有些只使用 as
而不是 generated always as
.
CREATE TABLE Table1(id INT,barcode varchar(255),lot varchar(255)) INSERT INTO Table1 VALUES (0,'ABC-123-456',NULL),(1,'ABC-123-654',NULL),(2,'ABC-789-EFG',NULL) ,(3,'ABC-456-EFG',NULL)
UPDATE a SET a.lot = SUBSTRING(b.barcode, 5, 3) FROM Table1 a INNER JOIN Table1 b ON a.id=b.id WHERE a.lot IS NULL
id | barcode | lot -: | :---------- | :-- 0 | ABC-123-456 | 123 1 | ABC-123-654 | 123 2 | ABC-789-EFG | 789 3 | ABC-456-EFG | 456
db<>fiddle here