2011-02-18 3 views
3

선택하고 두 테이블의 SQL 서버에서 삽입 방법 : 다른와 내가 표에서 @table이 결과에 삽입 할더 우아한처럼 2 개 테이블이

ID NAME 
------------- 
1 someValue 
2 someValue 
3 someValue 
4 someValue 
... 


ID NAME 
------------- 
1 var 
2 var2 
3 var3 
4 var4 
... 

하고, 표 2에서 3 개 결과,

  • 이 모 있는가 ...

    Declare @vars TABLE(
         field1 varchar(80), 
         field2 varchar(80), 
         field3 varchar(80), 
         field4 varchar(80), 
         field5 varchar(80) 
        ) 
    
    INSERT INTO @vars(field1, field2, field3, field4, field5) 
        SELECT a.Name, 
          b.Name, 
          c.Name, 
          d.Name, 
          e.Name 
        FROM @Table1 a, 
          @Table1 b, 
          @Table2 c, 
          @Table2 d, 
          @Table2 e 
        WHERE a.ID = 1 
        AND  b.ID = 25 
        AND  c.ID = 12 
        AND  d.ID = 25 
        AND  e.ID = 14 
    

    내가 예상 값을 얻을 수 있지만 : ID, 현재 내가 좋아하는 뭔가를 이 우아한 할 우아한 방법? 나는 이상이 필요하다고 생각합니다.

경찰서. 내가 좋아하는 뭔가를 얻을 : 더 우아하고 있는지 잘 모르겠어요

field1 field2 field3 field4 field5 
------------------------------------- 
val1  var2 val4 val7 var7 
+0

은'표 1, 표 2, 표 3, ..... '이전 스타일의 JOIN 구문을 사용은, 당신은, 데카르트 제품이되어있어! 항상 새로운 표준 ANSI JOIN 구문을 사용하는 것이 좋습니다. '내부 조인, 왼쪽 외부 조인, 오른쪽 외부 조인'등 –

답변

4

ID가 표 1 및 표 2의 기본 키 또는 고유 키인 경우 대신이 작업을 수행 할 수 있습니다. 당신은 많은 관심을 지불하지 않는 경우

insert into @vars 
select 
    (select Name from @Table1 where ID = 1), 
    (select Name from @Table1 where ID = 25), 
    (select Name from @Table2 where ID = 12), 
    (select Name from @Table2 where ID = 25), 
    (select Name from @Table2 where ID = 14) 
+2

이봐, 그게 공평하지 않아! 나는 OP보다 약간 더 우아한 솔루션을 게시 할 예정이었습니다. 너의 것은 모두 그 (것)들을 빛나기 위하여 나중에 배치되어야했다! :) +1 –

+0

안녕 얘들 아 고마워 !!. – cMinor

1

을하지만, 여기에 동일을하는 다른 쿼리입니다.

WITH myTables AS 
    (SELECT ID, NAME, 'Table1' AS SOURCE 
    FROM Table1 

    UNION ALL 

    SELECT ID, NAME, 'Table2' AS SOURCE 
    FROM Table2 
    ) 
INSERT INTO @vars(field1, field2, field3, field4, field5) 
SELECT MAX(CASE WHEN source = 'Table1' AND id = 1 THEN NAME END) AS field1, 
    MAX(CASE WHEN source = 'Table1' AND id = 25 THEN NAME END) AS field2, 
    MAX(CASE WHEN source = 'Table2' AND id = 12 THEN NAME END) AS field3, 
    MAX(CASE WHEN source = 'Table2' AND id = 25 THEN NAME END) AS field4, 
    MAX(CASE WHEN source = 'Table2' AND id = 14 THEN NAME END) AS field5 
FROM myTables 
WHERE SOURCE = ('Table1' AND ID IN (1, 25)) 
    OR (SOURCE = 'Table2' AND ID IN (12, 25, 14)) ; 

그것은 두 테이블의 조합을 만들 공통 테이블 식 (CTE)를 사용합니다. 또한 MAX 집계를 사용하여 데이터를 피벗합니다. PIVOT 연산자를 사용하여이 작업을 수행 할 수도 있습니다.