2013-12-20 2 views
1

가져온 테이블에서 삽입을 수행하고 mysql을 사용하여 여러 테이블에 데이터를 추가하고 있습니다.항목이 존재하고 mysql에 삽입되지 않았는지 확인하십시오.

기본적으로 삽입을 수행 할 때 데이터가 CSV에서 가져 오기되기 때문에 일부 null 필드가 있습니다.

내가 원하는 것은 데이터를 추출하고 여러 개의 null 항목을 만들지 않는 것입니다. 예를 들어 항목이없는 연락처를 추가하는 경우를들 수 있습니다. 기본적으로 테이블 내의 ID에 바인딩 될 수있는 테이블에 하나의 항목이 있어야합니다.

어떻게하면됩니까?

내 현재 코드가

기본적으로
Insert into Contact(FirstName, Surname, Position, TelephoneNo, EmailAddress, RegisteredDate) 

Select Distinct Import.FirstName, Import.SecondName, Import.JobTitle, 
       Import.ContactTelNumber, Import.EmailAddress, Import.RegistrationDate 
FROM Import 

이 수입하고 어떤 검사를하지 않습니다하지만 어디 이것에 대한 검사를 추가 할 수 있습니까?

답변

1

설명에서 정확히 무엇을 의미 하는지를 추측하기는 어렵습니다. 몇 줄의 예제 라인을 보여 주면 포함시킬 라인과 제외시킬 라인을 보여 주면 도움이 될 것입니다.

그러나 SELECT의 WHERE 절에 다양한 조건을 추가 할 수 있습니다. 예를 들어, 당신은 그냥 가져 오기에 적어도 하나의 열이 null이 아닌이 있는지 확인하려면, 당신이 할 수 있습니다 :

INSERT INTO Contact(FirstName, Surname, Position, TelephoneNo, 
    EmailAddress, RegisteredDate) 

SELECT DISTINCT FirstName, SecondName, JobTitle, 
       ContactTelNumber, EmailAddress, RegistrationDate 
FROM Import 
WHERE COALESCE(FirstName, SecondName, JobTitle, ContactTelNumber, 
    EmailAddress, RegistrationDate) IS NOT NULL 

COALESCE은() 인수의 변수 번호를 승인하는 함수이며, 반환 최초의 null 이외의 인수 모든 인수가 널 (NULL)이면 널 (NULL)을 리턴합니다. 따라서 우리가 을 모두 합쳐서 열을 얻으면 null을 얻습니다. 그러면 모든 열이 null이고 그 열을 제외한다는 것을 알 수 있습니다. 귀하의 코멘트를 다시


: 당신은 전체 행에 걸쳐 고유 제한 조건을 원하는처럼

좋아, 그것은 소리, 당신은 고유 제한 조건을 위반하지 않는 행만 복사 할.

ALTER TABLE Contact ADD UNIQUE KEY (FirstName, Surname, Position, TelephoneNo, 
    EmailAddress, RegisteredDate); 

INSERT IGNORE INTO Contact(FirstName, Surname, Position, TelephoneNo, 
    EmailAddress, RegisteredDate) 

SELECT DISTINCT FirstName, SecondName, JobTitle, 
       ContactTelNumber, EmailAddress, RegistrationDate 
FROM Import; 

, 삽입은 중복 행과 같은 오류가 발생하면 삽입하지 않는 수단을 무시뿐만 아니라의 삽입을 중단하지 않습니다 이러한 목표를 달성하기 위해

한 가지 방법은 다음과 같이 될 것이다 다른 행.

고유 제한 조건은 인덱스를 생성하므로 테이블 크기에 따라 ALTER TABLE을 실행하는 데 약간의 시간이 걸립니다.

또한 많은 열을 포함하는 키를 갖는 것은 실용적이지 않을 수 있습니다. 인덱스의 길이는 16 컬럼이고 전체 길이는 1000 바이트입니다. 그러나, 나는 당신이 정말로 원하는 것이 EmailAddress 또는 열의 다른 하위 집합마다 하나의 행으로 제한한다는 것을 기대합니다.

+0

안녕하세요 테이블이 다른 테이블 내의 외부 필드로 사용되므로 빈 행 하나만 갖고 싶습니다. 나는 다음을 시도해 봤지만 빈 줄이 있고 모두 같은 레코드를 삽입한다. 나는이 선들 중 하나만 필요로한다. – tjhack

+0

고유 Import.FirstName를 선택 연락 (FIRSTNAME, 성, 위치, TelephoneNo, EmailAddress를, RegisteredDate)에 삽입 Import.SecondName는 Import.JobTitle는 Import.ContactTelNumber는, NOT이 존재하는 Import.EmailAddress, Import.RegistrationDate 가져 오기 FROM (SELECT 1 FROM Contact.FirstName = Import.FirstName 및 Contact에 문의하십시오.성 = Import.SecondName 및 Contact.Position = Import.JobTitle \t \t \t \t \t 및 Contact.TelephoneNo = Import.ContactTelNumber 및 Contact.EmailAddress = Import.EmailAddress 및 Contact.RegisteredDate = Import.RegistrationDate) – tjhack

관련 문제