sql—如何使用同一表中另一列的数据更新表中的列?

dfuffjeb  于 2021-08-13  发布在  Java
关注(0)|答案(4)|浏览(473)

我有一张这样的“表1”:

+------+--------------------+
| id   | barcode     | lot  |
+------+-------------+------+
| 0    | ABC-123-456 |      |
| 1    | ABC-123-654 |      |
| 2    | ABC-789-EFG |      |
| 3    | ABC-456-EFG |      |
+------+-------------+------+

我必须提取“条形码”列中间的数字,如以下请求:

SELECT SUBSTR(barcode, 5, 3) AS ToExtract FROM table1;

结果是:

+-----------+
| ToExtract |
+-----------+
| 123       |
| 123       |
| 789       |
| 456       |
+-----------+

并将其插入“地段”栏。

pdtvr36n

pdtvr36n1#

沿着路线走

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

i、 在你的情况下是不可能的

UPDATE table_name
SET lot = SUBSTR(barcode, 5, 3)
WHERE condition;(if any)
bn31dyow

bn31dyow2#

UPDATE table1 SET Lot = SUBSTR(barcode, 5, 3) 
-- WHERE ...;
hfyxw5xn

hfyxw5xn3#

许多数据库都支持生成(即“虚拟”/“计算”列)。这允许您将列定义为表达式。语法如下:

alter table table1 add column lot varchar(3) generated always as (SUBSTR(barcode, 5, 3))

使用生成的列有几个优点:
它总是最新的。
它通常不占用任何空间。
创建表时没有开销(尽管查询表时有开销)。
我应该注意到,不同数据库的语法有点不同。有些不需要类型规范。有些人只是 as 而不是 generated always as .

kqlmhetl

kqlmhetl4#

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<>在这里摆弄

相关问题