2009-07-07 4 views
0

나는 다음과 같은 코드를 실행하면, 내가지고있어 결과 : 표 1 및 표 2 : 나는 두 테이블을 가지고이 코드에서 SQL 하위 쿼리를 올바르게 작성하는 방법은 무엇입니까? 같은

ID column1 column2 

34 Org13 Org13 
36 Org4 Org2 
41 Org3 Org5 

:

ID column1 column2 

34 NULL NULL 
34 Org13 Org13 
36 NULL NULL 
36 NULL Org2 
36 Org4 NULL 
41 NULL NULL 
41 NULL Org5 
41 Org3 NULL 

내가 좋아하는 내 결과를보고 싶다. 표 2는 다음 필드가 포함 된 찾아보기 표입니다. id, name

표 1에는 다음 필드 (id, column1, column2)가 있습니다. 1 열 및 2 열 모두 조회 테이블에 외래 키 관계가 있습니다

FK_1: Table1.column1-Table2.id 
FK_2: Table1.column2-Table2.id 

내가 1 열 및 2 열 값을 꺼내 원하고 있기 때문에 이러한 값 모두 동일한 필드에서 조회이기 때문에 (Table2.name) , 나는 내부 선택을 할 필요가 있다고 생각한다.

내 코드는 다음과 같습니다. 내가 얻는 결과 대신 원하는 결과를 산출 할 수 있도록 어떻게 변경할 수 있습니까? 미리 감사드립니다!

DECLARE @value INT 
SET @value = 14 

SELECT DISTINCT 
    Table1.[id]   AS ID 
    , (SELECT DISTINCT 
      Table2.[name] 
     WHERE 
      Table1.column1 = 
      Table2.id) AS column1 
    , (SELECT DISTINCT 
      Table2.[name] 
     WHERE 
      Table1.column2 = 
      Table2.id) AS column2 
FROM 
    Table1 
    ,Table2 
WHERE 
    Table1.[id] = @value 

답변

2

GBN, 난 당신이

DECLARE @value INT 
SET @value = 1 

SELECT --??? DISTINCT 
    t1.[id] AS ID, --- missed comma 
    table2a.name, 
    table2b.name 
FROM 
    Table1 t1 
    JOIN Table2 table2a ON t1.column1 = table2a.id 
    JOIN Table2 table2b ON t1.column2 = table2b.id -- you have t1.column1 oops 
WHERE 
    t1.[id] = @value 
+0

감사합니다. – Cuga

+0

column1 및/또는 column2가 nullable 인 경우 내부 조인 대신 왼쪽 조인을 사용하여 행을 잃지 않도록 할 수 있습니다. –

+0

헤즈 업에 감사드립니다. 이 특별한 경우에, 그들은 nullable이 아니지만, 당신의 충고를 계속 지킬 것입니다. =) – Cuga

2
DECLARE @value INT 
SET @value = 14 

SELECT 
    t1.[id]     AS ID 
    MAX(t2a.name), 
    MAX(t2b.name) 
FROM 
    Table1 t1 
    LEFT JOIN 
    Table2 t2a ON t1.column1 = t2a.id 
    LEFT JOIN 
    Table2 t2b ON t1.column2 = t2b.id 
WHERE 
    t1.[id] = @value 
GROUP BY  
    t1.[id]  
3
/* 
    create table table1(id int, col1 int, col2 int); 
    create table table2(id int, name varchar(10)); 

    insert into table2 values(1, 'org 1'); 
    insert into table2 values(2, 'org 2'); 
    insert into table2 values(3, 'org 3'); 
    insert into table2 values(4, 'org 4'); 

    insert into table1 values(1, 1, 2); 
    insert into table1 values(2, 2, 2); 
    insert into table1 values(3, 2, 3); 
    insert into table1 values(4, 4, 1); 
    */ 

    select 
     a.id, 
     b.name as column1, 
     c.name as column2 
    from 
     table1 a 
    join table2 b on b.id = a.col1 
    join table2 c on c.id = a.col2; 


id  column1  column2  
----- ---------- ---------- 
1  org 1  org 2  
2  org 2  org 2  
3  org 2  org 3  
4  org 4  org 1  

4 record(s) selected [Fetch MetaData: 3/ms] [Fetch Data: 0/ms] 

[Executed: 7/7/09 4:07:25 PM EDT ] [Execution: 1/ms] 
+0

무엇 표 1에서 NULL을 여러 ID 값에 대한 쓰기 의미 생각하십니까? – gbn

+0

그가 "결과"라고했기 때문에 나는 그의 질문에 표시된 첫 번째 결과를 table1의 내용으로 해석하지 않았습니다. 나는 null이 자신의 샘플 쿼리에서 자신의 부정확 한 전체 조인에서오고 있다고 가정했다. 그게 잘못된거야? – Daryl

+0

당신은 당신의 해석에있어 정확합니다 - 널 결점은 나의 결점의 일부였습니다 - 어떤 기록에도 널 (null)이 없습니다. – Cuga