簡體   English   中英

如何將一列值從一個表插入到另一個不匹配的模式?

[英]How do I insert a column of values from one table to another, non-matching schemas?

我有兩個表:
表AlastNamefirstNameclientExtension
表BclientExtension列,但是此表中還clientExtension lastNamefirstNameclientExtension 這三列的數據類型在每個表中都匹配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)以及其他信息(例如付款期限等)來標識一行。一種用於識別收款人的可怕方法是通過名字和姓氏。

計划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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM