题
我有,我想要提取出并放入单独的表中的列的表。
举例来说,可以说我有一个表命名联系人。联系人有一个名为列名其中存储的字符串。现在我想的名字拔出到另一台名为名称和Contact.Name列链接到名称表的ID。
我只能用SQL做到这一点。的最佳方式任何想法去了解呢?
让我知道如果我能澄清什么,谢谢!
[编辑] 一个问题是,不同的接触可连接到相同的名称。所以当不同联系人具有相同的名称和它被导出的名称表将只拥有该名称的一个唯一的行和所有联系人将指向该行。我想这是没有意义的,如果我实际上是在联系簿的工作,但我只是用它来说明我的问题。
解决方案
CREATE TABLE Name (NameID int IDENTITY(1, 1), [Name] varchar(50))
INSERT INTO Name ([Name])
SELECT DISTINCT [Name]
FROM Contact
ALTER TABLE Contact
ADD COLUMN NameID int
UPDATE Contact
SET NameID = [Name].NameID
FROM Contact
INNER JOIN [Name]
ON Contact.[Name] = [Name].[Name]
ALTER TABLE Contact
DROP COLUMN [Name]
然后添加外键约束等
其他提示
与指向返回到联系人表的外键创建新表。然后插入来自联系人表中的姓名和contactids到这个新表。之后,你可以从接触表中删除了“名称”列中。
CREATE TABLE Name
(
ContactId int,
Name nvarchar(100)
);
INSERT Name(Name)
SELECT ContactId, Name From Contact;
ALTER TABLE Contact
DROP Column name;
修改:强>由于已编辑的问题一提的是一个名称可以与多个联系人相关联,这个变化的东西以相反的方式
CREATE TABLE Name
(
NameId int IDENTITY,
Name nvarchar(100)
);
INSERT Name(Name)
SELECT DISTINCT Name From Contact;
ALTER TABLE Contact
ADD NameId int;
UPDATE c
SET c.NameId = n.NameId
FROM Contact c
JOIN Name n on n.Name = c.Name;
ALTER Table Contact
Drop Column Name;
注意:请确认您使用的联系表格填充NameID建立联系和名称表之间此时,相应的外键,并在名称表中的“名称”列创建UNIQUE约束
insert into another_table( contact_id, name )
select id, name
from contacts;
insert into new_table (contact_id, name)
select min(id), name
from contacts
group by name;
这是确保每名只有一行单程 - 您也可以替换其它功能分钟(等,用于例如最大)
。我不太知道你为什么会想这样做,虽然。不管你到底是什么,与一些接触没有链接到他们的名字......
ALTER TABLE `Contacts` ADD `name_id` INT( 12 ) NOT NULL
ALTER TABLE `Name` ADD `Name` VARCHAR( 200 ) NOT NULL
INSERT INTO Name (id, name) SELECT id, Name FROM Contacts
ALTER TABLE `Contacts` DROP `Name`
问题是名_ID字段,它是与FILLES“0”,并应具有在联系人-表相同的值的ID。在这里,您可以使用 LOOP 或ITERATE语句(如果使用MySQL)。
不隶属于 StackOverflow