database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 3673 게시물 읽기
No. 3673
셀렉트 질문입니다.
작성자
Wenzie
작성일
2007-08-06 17:11
조회수
2,648

Tbl_A

code

company

manager

AAA

(주)다움

홍길동

BBB

(주)네이놈

이순신

 

Tbl_B

 

code

manager

AAA

1111

BBB

2222

BBB

3333

AAA

4444

 

제가 얻으려는 결과는

 

 

company

manager

(주)다움

홍길동

(주)다움

1111

(주)다움

4444

 

이런 결과를 얻고 싶은데요..

 

어떻게 해야 할까요???

Tbl_B 테이블에  일치하는 코드가 없을 수도 있고 없다면 Tbl_A에 manager만 나오면 됩니다.

 

모르겠네요..-_-;

 

바쁘시더라도 답변 부탁드립니다.~~

 

수고하세요~~~

이 글에 대한 댓글이 총 4건 있습니다.

UNION ALL 후 GROUP BY로 간단히 처리가능합니다.
비슷한 개념으로 Full Outer Join이 있긴하지만 내부적으로 Left Outer + Right Outer + Union처리이므로 코딩량은 줄 수 있을지 모르나 대용량으로 갈 수록 UNION ALL보다 성능면에서는 비효율일 확률이 있습니다.

SELECT 
      MAX(company) AS company
    , manager
FROM(
    SELECT company, code, manager
    FROM tbl_a
    WHERE code = 'AAA'
    UNION ALL
    SELECT '', code, manager
    FROM tbl_b
    WHERE code = 'AAA'
    ) AA
GROUP BY code, manager

Tbl_A나 Tbl_b에서 code, manager가 동일한 데이터의 중복이 가능한 구조라면 별도의 처리가 필요할 수 있습니다. 
결과 확인 해 보세요...;

건승하시길...수고하세요~~

성시현(finecomp)님이 2007-08-06 17:36에 작성한 댓글입니다.
이 댓글은 2007-08-06 17:37에 마지막으로 수정되었습니다.

답변 감사합니다.


한가지 더 질문해도 될런지요..


결과는 잘 나오는데 데이터가 섞여서 나오네요..


company

manager

(주)다움

홍길동

(주)다움

1111

(주)다움

4444



이렇게 나오게는 안되나요?


그러니까 

Tbl_A에 있는 manager 먼저 나오고


그다음 Tbl_B에 있는 manager 나오게 연속적으로요 한 company에 manager가 연속으로 나오게요..


답변 감사합니다~



Ps:Tbl_A는 code값이 중복될일은 없지만 Tbl_B는 중복될 수 있는데 ..

음..중복데이터를 입력하니 한개만 나오는군요..흠...

Wenzie님이 2007-08-06 17:48에 작성한 댓글입니다.
이 댓글은 2007-08-06 17:52에 마지막으로 수정되었습니다. Edit

간단하다고 테스트를 안했더니 이전 쿼리에 오류가 있었네요...죄송...;

중복가능성까지 집어넣어 테스트 했습니다...;



테스트 데이터 ...

with

    tbl_a as

 (

 select 'AAA' as code, RTRIM('(주)다움  ') as company, '홍길동' as manager union all

 select 'BBB' as code, RTRIM('(주)네이놈') as company, '이순신' as manager

 )

  , tbl_b as

 (

 select 'AAA' as code, '1111' as manager union all

 select 'AAA' as code, '1111' as manager union all

 select 'BBB' as code, '2222' as manager union all

 select 'BBB' as code, '3333' as manager union all

 select 'AAA' as code, '4444' as manager

 )



쿼리 ...

-- 2005 버전 이상

SELECT

      MAX(company)OVER() AS company

    , manager

FROM(

    SELECT 1 as rn, company, code, manager

    FROM tbl_a

    WHERE code = 'AAA'

    UNION ALL

    SELECT 2 as rn, '', code, manager

    FROM tbl_b

    WHERE code = 'AAA'

    ) AA

ORDER BY rn


-- 2005 버전 이전

SELECT

      (

      SELECT company

      FROM tbl_a BB

      WHERE BB.code = AA.code

      ) AS company

    , manager

FROM(

    SELECT 1 as rn, code, manager

    FROM tbl_a

    WHERE code = 'AAA'

    UNION ALL

    SELECT 2 as rn, code, manager

    FROM tbl_b

    WHERE code = 'AAA'

    ) AA

ORDER BY rn



테스트 결과 ...

company    manager

=======================

(주)다움     홍길동

(주)다움     1111

(주)다움     1111

(주)다움     4444


건승하시길...수고하세요~~

성시현(finecomp)님이 2007-08-06 18:08에 작성한 댓글입니다.

헉..
답변 감사합니다~~~

수고하세요~~~

Wenzie님이 2007-08-06 19:19에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3679sql 질의식 질문입니다 [1]
노주원
2007-08-09
2162
3677ms-sql2000에서 ms-sql2005로접속 [1]
훈00
2007-08-08
2482
3675월별 순위리스트작성에서 동률에 대한 문제.. [4]
유성만
2007-08-08
3032
3673셀렉트 질문입니다. [4]
Wenzie
2007-08-06
2648
3672자료 변환에 대한 문의 드립니다. [1]
자료형
2007-08-04
2381
3671timestamp 에 관한 의문점 [1]
정영철
2007-08-03
2497
3670프로시저의 트랜잭션에 관해서... [1]
이철림
2007-08-03
2540
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다