gpt4 book ai didi

mysql - 如何将一个表中的一列值插入到另一个不匹配的模式中?

转载 作者:行者123 更新时间:2023-11-28 23:53:16 25 4
gpt4 key购买 nike

我有两个表:
表 A:lastNamefirstNameclientExtension
表 B:约 45 列,但是 lastNamefirstNameclientExtension 也在该表中。这三列的数据类型在每个表中匹配。lastName VARCHAR(150),firstName VARCHAR(150),clientExtension INT(5) unsigned.

表 A 有 31 行,没有 NULL 值。 表A中的记录已经存在于表B中,但我的目标是更新表B中的clientExtension值> 成为每个代理的 Table A 中的 clientExtension 值。

这是我到目前为止尝试过的方法,没有运气..

INSERT INTO table_A (lastName, firstName, clientExtension)
SELECT clientExtension
FROM tableB AS tb
WHERE lastName=tb.lastName
AND firstName=tb.firstName;

我也尝试过使用 UPDATE 函数,但我似乎无法让它工作。感觉我正在尝试做的是 INNER JOIN,除了我不希望使用 INNER JOIN 的输出创建一个新表,我'我希望使用 Table A 中的 clientExtension 值更新 Table B 中的现有记录。

有什么想法吗??

最佳答案

在这些表中有几十行之前,此架构需要一些帮助。如果那确实是您的架构,那么当名称更改时您会遇到一些问题。展示更好的方法需要几分钟时间,请耐心等待。

如果您还没有(在更好的架构上),我将展示更新/加入模式。

create table tableA
( -- assuming this is really a user table
id int auto_increment primary key, -- if you don't have this, you are going to have problems
firstName varchar(150) not null,
lastName varchar(150) not null,
clientExtension int not null -- sign, display width of no concern
);-- sign, display width of no concern
insert tableA (firstName,lastName,clientExtension) values ('f1','l1',777),('f2','l2',888);

create table tableB
( -- assuming this is really a user table
id int auto_increment primary key, -- if you don't have this, you are going to have problems
firstName varchar(150) not null,
lastName varchar(150) not null,
clientExtension int not null
);
insert tableB (firstName,lastName,clientExtension) values ('f1','l1',0),('f2','l2',0);

update tableB b
join tableA a
on a.id=b.id
set b.clientExtension=a.clientExtension;

select * from tableA;
(same as below)

select * from tableB;
+----+-----------+----------+-----------------+
| id | firstName | lastName | clientExtension |
+----+-----------+----------+-----------------+
| 1 | f1 | l1 | 777 |
| 2 | f2 | l2 | 888 |
+----+-----------+----------+-----------------+

总而言之,如果您联接在一个表中更改的名称而不是另一个表中的名称,则会遇到问题。这就是为什么您需要一个不会改变的主键(而不是当 Bob 再次成为 Robert 时)。

此外,如果您的表不是用户表,那么 int id 的 PK 也同样重要。 id 在其他表中使用,没有将 firstName、lastName 拖到那些 non-user Entity 表中作为键的非规范化想法,如果你愿意的话。

非用户实体 表是什么意思?好吧,这是我编造的,第一个出现在我脑海中的短语。它是关于数据规范化,以及第二和第三范式等概念。假设您有一张工资单表。一行需要由 PayeeId(即上表中的用户 ID)和其他信息(例如支付期等)来标识。通过名字和姓氏来标识收款人的一种可怕方式。

B 计划:(我对这样做嗤之以鼻,但就是这样)

update tableB b
join tableA a
on a.firstName=b.firstName and a.lastName=b.lastName
set b.clientExtension=a.clientExtension;
-- 2 row(s) affected

关于mysql - 如何将一个表中的一列值插入到另一个不匹配的模式中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com