2016-09-29 3 views
1

Table_B의 데이터가 Table_A에없는 경우 Table_B의 column1 데이터를 Table_A에 삽입하려고합니다. 예를 들어 'Headache'는 Table_B의 column1에 있지만 Table_A의 column1에는 없습니다. 감사. 나는 아래의 SQL을 썼다, 그러나 그것은 작동하지 않았다 :다른 테이블에서 하나의 테이블에 삽입

insert into Table_A(column1) 
select column1 
from Table_B 
where column1 not in (select column1 from Table_A) 
+0

* "작동하지 않음"*은 무엇을 의미합니까? 당신은 정교 할 수 있습니까? 오류가 있었습니까? 또한, 어떤 DBMS를 사용하고 있습니까? – GarethD

답변

1

이 시도 : 확실히 말할 어렵다없는 샘플 데이터로

INSERT INTO Table_A(column1) 
SELECT B.column1 
FROM Table_B B 
LEFT JOIN Table_A A ON B.column1 = A.column1 
WHERE A.column1 IS NULL 
0
Insert into Table_A(column1) 
select column1 from Table_B 
left join Table_A on Table_B.column1 = Table_A.column1 
where A.column1 is null 
0

,하지만 내 추측 일 것 table_A.Column1NULL 값이 있습니다. 의 것과 동일

SELECT Column1 
FROM Table_B 
WHERE Column1 NOT IN (1, 2, 3, NULL); 

: Column1 <> NULL 이후

SELECT Column1 
FROM Table_B 
WHERE Column1 <> 1 
AND  Column1 <> 2 
AND  Column1 <> 3 
AND  Column1 <> NULL; 

쿼리가 어떤 결과를 반환하지 않습니다, 사실이 아니다 당신이 null 값을 가지고 한 경우, 쿼리는 같은 동등 할 것이다. 당신이 NULL 열이있을 수 있습니다 원하는 결과를 달성하기 위해 가장 문법적으로 유사한 방법 NOT EXISTS을 사용하고 있습니다 :

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
WHERE NOT EXISTS (SELECT 1 FROM Table_A AS A WHERE A.Column1 = B.Column1); 

그러나, 당신이 사용할 수있는 또 다른 방법은이에서

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
     LEFT JOIN Table_A AS A 
      ON A.Column1 = B.Column1 
WHERE A.Column1 IS NULL; 

왼쪽 table_A에 가입하여 A.Column1NULL이어야하며 이미 Table_A에있는 레코드를 제거해야합니다.

는 내가 의도가 훨씬 더 분명하다 생각하기 때문에, ( NOT EXISTS) 전자를 선호하지만, 만약 당신이 use MySQL the latter will perform better

또는 당신은 또한 사용할 수 있습니다

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
WHERE B.Column1 IS NOT NULL 
AND  B.COlumn1 NOT IN (SELECT A.Column1 FROM Table_A AS A WHERE A.Column1 IS NOT NULL); 
0

무엇 MERGE 문을 사용하는 방법에 대해?

MERGE INTO TABLE_A a 
USING TABLE_B b ON (a.column1=b.column1) 
WHEN NOT MATCHED THEN 
    INSERT (column1) VALUES (b.column1); 
관련 문제