我是Mysql的新手。我创建了两个表Users和Administrations,如下所示:
CREATE TABLE IF NOT EXISTS Users (
FName VARCHAR(10) NOT NULL,
MI CHAR(1) NOT NULL,
LName VARCHAR(15) NOT NULL,
ID CHAR(11) NOT NULL,
GENDER CHAR(6) NOT NULL,
ADDRESS VARCHAR(15) NOT NULL,
DOB DATE NOT NULL,
PRIMARY KEY (ID)
);
CREATE TABLE IF NOT EXISTS Administration (
ID CHAR(11) NOT NULL,
Position VARCHAR(15) NOT NULL DEFAULT 'NYA',
PRIMARY KEY (ID),
FOREIGN KEY (ID) REFERENCES Users(ID)
);
填充的管理表如下:
INSERT INTO Administration (ID)
SELECT ID FROM Users WHERE Address = 'Brooklyn';
现在我在Administration表中添加了一个新列:
ALTER TABLE administration
ADD LName VARCHAR(25) AFTER ID;
现在我的目标是将LName填充到管理表中。 我实现了如下:
TRUNCATE Administration;
INSERT INTO Administration (ID,LName)
SELECT ID,LName FROM Users WHERE Address = 'Brooklyn' ;
我的问题是使用截断是个好主意?还是有其他解决办法。
答案 0 :(得分:0)
TRUNCATE
是一个好主意。但您也可以更新表格:
UPDATE Administration a JOIN
Users u
ON a.id = u.id
SET a.Lname = u.Lname
WHERE u.Address = 'Brooklyn';
注意:如果WHERE
中id
是唯一的,则不需要Users
条款。
对于大型表,重新插入所有数据通常会更快,而不是更新所有行。
答案 1 :(得分:0)
请尝试以下查询,您的目的将解决。
UPDATE ad SET ad.LName = u.LName
FROM Administration as ad
LEFT OUTER JOIN Users u on u.ID = ad.ID