![](/img/trans.png)
[英]MySQL - how to insert values from one table into another with string matching?
[英]How do I insert a column of values from one table to another, non-matching schemas?
我有兩個表:
表A : lastName
, firstName
, clientExtension
表B : clientExtension
列,但是此表中還clientExtension
lastName
, firstName
和clientExtension
。 這三列的數據類型在每個表中都匹配clientExtension INT(5) unsigned
lastName VARCHAR(150)
, firstName VARCHAR(150)
, clientExtension INT(5) unsigned
。
表A有31行,沒有NULL值。 表A中的記錄已經在表B中 ,但是我的目標是將表B中的clientExtension
值更新為每個代理的表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
的輸出創建一個新表,而是要使用表中的clientExtension
值更新表B中的現有記錄。 表A。
有任何想法嗎??
在這些表中有幾十行之前,此架構需要一些幫助。 如果這確實是您的架構,則名稱更改時會遇到一些問題。 請耐心等待幾分鍾,以顯示一種更好的方法。
然后,如果您還沒有更新/連接模式(在更好的架構上),我將顯示它。
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 |
+----+-----------+----------+-----------------+
長或短的地方是,如果您聯接在一個表中而不是另一個表中更改的名稱,則會遇到問題。 這就是為什么您需要一個不變的主鍵的原因(與鮑勃再次成為羅伯特時相反)。
同樣,如果您的表不是用戶表,則int id的PK同樣重要。 在其他表中使用該id時,沒有取消規范化的想法,即可以將firstName,lastName拖到那些non-user Entity
表中作為鍵。
non-user Entity
表是什么意思? 好吧,我有點想起來了,第一個短語浮現在腦海。 它涉及數據規范化,以及諸如第二和第三范式的概念。 假設您有一個paystub表。 需要使用PayeeId(這是上表中的用戶ID)以及其他信息(例如付款期限等)來標識一行。一種用於識別收款人的可怕方法是通過名字和姓氏。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.