sql更新-如何使用另一个表从一个表更新列?

flvtvl50  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(372)

我会尽可能地解释这一点,如果这不合理,我会提前道歉。我在一个表(table.a)中有两列(first\u name和last\u name),其中有很多数据不正确。我正在尝试用另一个表(table.b)中的正确数据更新这些列。问题是表.b的列在一列中同时包含名字和姓氏数据。例如,table.a列和值是first\u name=richard,last\u name=johnsondev,而table.b列和值是full\u name=johnsondev,richard。有没有一种方法可以使用table.b数据的一部分更新table.a和两列?唯一一致的是table.b姓氏以“dev”结尾,比如“johnsondev,richard”

编辑:

我正在使用microsoft sql server。希望下面的信息是有用的!

当前表数据

表b

FULL_NAME
Johnsondev, Richard
Smithdev, Kevin

表a

FIRST_NAME / LAST_NAME
Richard    / Jacksondev 
Kevin      / Standev

使用查询的预期输出

TABLE.B stays the same

TABLE.A 
FIRST_NAME / LAST_NAME
Richard    / Johnsondev 
Kevin      / Smithdev

uwopmtnx

uwopmtnx1#

如果你使用 JOIN 方法,这将是sql server的语法:

UPDATE a SET FIRST_NAME=SUBSTRING(b.FULL_NAME, CHARINDEX(',',b.FULL_NAME) +1, Len(b.FULL_NAME)), 
LAST_NAME=LEFT(b.FULL_NAME, CHARINDEX(',',b.FULL_NAME)-1)
FROM Table_A a JOIN Table_B b ON a.ID = b.ID -- assumes a common ID field
yacmzcpb

yacmzcpb2#

在mysql中,您可以执行以下操作。根据您的设置,这可能需要修改。但是,对于 LAST_NAME 我们正在选择所有符合指定分隔符的内容 ',' . 为了 FIRST_NAME 我们把所有东西都选在我们过去姓的右边。注意,这将更新所有名称。你可以用 WHERE 之后`

UPDATE Table_A a
SET a.FIRST_NAME = (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(FULL_NAME, ',', 2), ' ', -1)
                    FROM TABLE_B),
    a.LAST_NAME = (SELECT SUBSTRING_INDEX('Johnsondev, Richard', ',', 1)
                   FROM TABLE_B),

或者,您可能需要将它们连接在一起。

UPDATE Table_A a
JOIN Table_B b ON b.ID = a.ID -- assumes a common ID field
SET a.FIRST_NAME = (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(FULL_NAME, ',', 2), ' ', -1)
                    FROM TABLE_B),
    a.LAST_NAME = (SELECT SUBSTRING_INDEX('Johnsondev, Richard', ',', 1)
                   FROM TABLE_B),

根据您的请求进行编辑,经过一些测试后,这些可能是sql server中的替代方案。
子字符串: SUBSTRING ( expression ,start , length ) 查林德克斯: CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] ) ```
SELECT SUBSTRING('Johnsondev, Richard', CHARINDEX(',','Johnsondev, Richard') +1, Len('Johnsondev, Richard')) -- Richard

SELECT LEFT('Johnsondev, Richard',CHARINDEX(',','Johnsondev, Richard')-1) -- Johnsondev

使用变量:

SELECT SUBSTRING(FULL_NAME, CHARINDEX(',',FULL_NAME) +1, Len(FULL_NAME))
FROM TABLE_B

SELECT LEFT(FULL_NAME, CHARINDEX(',',FULL_NAME)-1)
FROM TABLE_B

我对sql server的语法不太熟悉 `UPDATE` 但你可以在这里找到它。

相关问题