2016-07-13 2 views
0

2 개의 다른 데이터베이스가 있습니다. 둘 다 과일이라고 불리는 테이블이 있습니다. 이제 첫 번째 데이터베이스와 관련하여 두 번째 데이터베이스를 업데이트하려고합니다. 이를 위해 각 행을 첫 번째 데이터베이스의 모든 열 값 (ID 열 제외)과 두 번째 데이터베이스의 각 행과 비교하여 차이가있는 행을 가져옵니다. 내가 사용하고있는 쿼리는2 개의 다른 데이터베이스에있는 2 개의 테이블의 행을 비교하십시오.

SELECT A.* FROM db1.Fruit A 
      Left Outer Join Fruit B ON 
      (A.Ratings = B.Ratings AND A.Name = B.Name AND A.Color = B.Color) 
where B.Ratings IS NULL OR B.Name IS NULL OR B.Color IS NULL 

Table in the first databaseTable in the second database입니다.

결과적으로 이름이 키위이고 색이 녹색 인 ID가 3 인 행이 표시되어야합니다. 그러나 그것은 또한 다른 열이 null 인 바나나 이름으로 ID 4를 가진 행을 보여 주며 내 쿼리에서는 그 행을 반환합니다 (B.Ratings IS NULL or B.Color IS NULL 인 경우).

따라서 ID 열을 제외한 모든 열에 의해 표 1의 1 행 1 열을 표 2의 1 행과 비교하고 열 값에 불일치가있는 행을 반환하는 다른 방법이 있습니까?

+2

안녕하세요. 코드는 영어로 번역하는 대신 코드를 읽을 때 가장 잘 이해할 수 있습니다. [MCVE]를 제공해주십시오. – user463035818

답변

0
나는 편집 : 혼동 된

: 내 초기 대응에 돌아 가지

SELECT A.* 
FROM db1.Fruit as A JOIN db2.Fruit as B ON 
(A.Name = B.Name AND A.Color = B.Color) 
WHERE A.Rating <> B.Rating 

것 왼쪽에 널 (null) (당신이 그것의 오른쪽 부분을 볼 수와 행을 제공하는 LEFT OUTER JOIN); 그것은 당신이하고 싶은 것이 아닙니다 (적어도 현재 나의 이해입니다). 이 문장은 당신에게 줄 것이다 : DB2에서와 같은 이름과 색깔을 가지고 있지만 등급이 다른 db1에 관한 정보 (나는 당신이 얻고 자하는 것이라고 생각한다). 열의 조합을 변경하려면 조인을 변경해야합니다.

+0

내부 조인은 둘 다 다른 행을 줄 것입니다. 나는 처음에는 거기에있는 것들만 필요로하지만, 두번째에있는 것들은 필요치 않습니다. 그래서 내가 사용해야합니까? 또한 <> 연산자의 사용법을 알고 싶었고 등급이나 이름 또는 색상이 다를 때 수행 할 작업은 B.Name <> A.Name 및 B.Color <> A.Color를 수행하면 어떻게 될까요? –

+0

첫 번째에는 있지만 두 번째 데이터베이스에는없는 행을 가져 오려고합니다. 또한 열의 조합을 기반으로 행을 선택하고 싶습니다. EXCEPT 또는 MINUS 명령을 사용하여이 작업을 수행 할 수 있지만 그 문제는 모든 열을 비교하는 것입니다. ID 열 (ID는 다를 수 있지만 나머지 열 값은 동일해야 함)을 비교하고 싶지 않습니다. 또한 두 데이터베이스의 해당 열에서 값이 null 인 경우 해당 행을 반환하지 않아야합니다. 위에서 언급 한 명령은 또한 두 열의 값이 해당 열의 null 인 행을 반환합니다. 어떻게해야합니까? –

관련 문제