문제

추출하여 별도의 테이블에 넣으려는 열이 있는 테이블이 있습니다.

예를 들어 연락처라는 테이블이 있다고 가정해 보겠습니다.연락처에는 문자열을 저장하는 Name이라는 열이 있습니다.이제 이름을 Name이라는 다른 테이블로 가져오고 Contact.Name 열을 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]

그런 다음 외래 키 제약을 추가하십시오.

다른 팁

연락처 테이블을 다시 가리키는 외래 키를 사용하여 새 테이블을 만듭니다.그런 다음 연락처 테이블의 이름과 연락처 ID를 이 새 테이블에 삽입합니다.그런 다음 연락처 테이블에서 "이름" 열을 삭제할 수 있습니다.

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;

이것은 이름 당 하나의 행만 보장하는 한 가지 방법입니다. 최소 (예 : Max)의 다른 기능을 대체 할 수 있습니다.

그래도 왜 그렇게하고 싶은지 잘 모르겠습니다. 어쨌든, 당신은 그들과 링크 된 이름이없는 일부 연락처로 끝날 것입니다 ...

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`

문제는 name_id 필드로, "0"으로 채워지며 Contacts-Table의 ID와 동일한 값을 가져야합니다. 여기에서 사용할 수 있습니다 고리 또는 진술을 반복하십시오 (MySQL을 사용하는 경우).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top