2016-11-23 3 views
0

SQL Server를 제외하고 다른 열만 사용하면 어떻게 다른 열을 반환 할 수 있습니까?SQL Server를 제외한 열 반환

예 : 다른 이름 리턴이있는 경우이 경우

SELECT ID, NAME FROM TABLE_B 
EXCEPT 
SELECT ID, NAME FROM TABLE_A 

, 그냥 이름 열을 보여줍니다.

+6

당신은 내가 완전히 당신이 요구하는지 이해하지 않는 일부 샘플 데이터를 원하는 출력을 제공 할 수 있습니다

가정 ID는 널 (NULL)은 "동일한"고려되어야한다, NAME이 널 (NULL), NULL NOT입니까? – Tanner

+0

어쩌면 [이 답변] (http://stackoverflow.com/a/2077929/5809511)을보십시오. –

+0

ID, NAME을 (를) 사용할 수 있습니까? – Serg

답변

0

코드가 정확합니다. 반복 행이 없습니다 (ID + NAME!).

하지만 제대로 이해하면 이름에만 집중할 수 있습니다. [주석 대해 편집 :]

SELECT NAME FROM TABLE_B 
EXCEPT 
SELECT NAME FROM TABLE_A 

을 : 다음 선택된 필드에서 ID를 제거

이 TABLE_A에없는 TABLE_B 구별 행을 나타낸다. 이것이 EXCEPT를 사용하는 목표입니다. 다른 무엇보다도 EXCEPT는 해결책이 아닙니다.

당신이 두 테이블의 모든 개의 다른 이름을 찾고있는 경우

, 당신은 사용할 수 있습니다

select distinct NAME 
from 
    (select NAME from TABLE_A 
    UNION 
    select NAME from TABLE_B) as T 
+0

당신의 솔루션으로는'TABLE_B '에서'TABLE_A'가 아닌 이름 만 얻을 수 있습니다. 'TABLE_A'에있는 이름들은 어떨까요? –

+0

@diiN_ 네 말이 맞아. TABLE_B의 개별 행을 TABLE_A에없는 행으로 표시합니다. EXCEPT를 사용하는 것이 목표입니다. 다른 무엇보다도 EXCEPT는 해결책이 아닙니다. 귀하의 의견에 관해서는 ... @ diiN_ 어쩌면 당신은 'distinct distinct name from (TABLE_A UNION의 NAME을 TABLE_B의 NAME을 선택하십시오.)'과 같은 것을 찾고 있습니다. 두 테이블 모두에서 다른 이름을 얻을 수 있습니다. – MarcM

0

당신은 결과 세트를 얻을 수있는 형태로 된 두 번째 테이블에서 플래그 존재하지 않는 데이터를

ID flag_ID NAME flag_Name 
1 !  A  !     -- No Id=1, no NAME ='A' exists in the second table 
3 NULL NULL !     -- Id=3 exists, no NAME is NULL exists 
4 NULL Y  NULL    -- Both values exist but never in the same row 

그리고 필요한 기준으로 진행하십시오.

SELECT b.ID, 
     CASE WHEN NOT EXISTS (SELECT 1 FROM a t2 WHERE t2.ID=b.ID) THEN '!' END flag_ID, 
     b.NAME, 
     CASE WHEN NOT EXISTS (SELECT 1 FROM a t2 
          WHERE ISNULL(NULLIF(b.NAME, t2.NAME), NULLIF(t2.NAME, b.NAME)) IS NULL) 
          THEN '!' END flag_Name 
FROM b 
LEFT JOIN a ON a.ID = b.ID 
    AND ISNULL(NULLIF(a.NAME, b.NAME), NULLIF(b.NAME, a.NAME)) IS NULL 
WHERE a.ID IS NULL 
    OR ISNULL(NULLIF(a.NAME, b.NAME), NULLIF(b.NAME, a.NAME)) IS NOT NULL 
관련 문제