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 5877 게시물 읽기
No. 5877
1:N관계에서 N테이블에 원하는 값이 있다면
작성자
조중규(biosensor)
작성일
2011-04-24 17:32ⓒ
2011-04-24 17:42ⓜ
조회수
6,402

TABLE1

HEAD
A
B
C

 

 

TABLE2

HEAD VALUE
A 1
A 2
B 1
B 4
B 3
C 6
C 2
C 8

위와 같은 구조의 일반적으로 많이 쓰는 테이블이 2개 있습니다.

 

원하는 값은 VALUE '1'을 값으로 가지고 있는 HEAD 'A', 'B'에 연결된 값을 전부 표시하는겁니다.

 

즉 조건 : VALUE = '1' 을 전달했을때 표시되어야하는 결과

HEAD VALUE
A 1
A 2
B 1
B 4
B 3

 

제 머릿속엔 단순히 VALUE = '1'인 HEAD 값 'A', 'B'를 찾아서 다시 HEAD IN ('A', 'B') 로 쿼리하는 여러단계의 서브쿼리를 사용하는 평범한 방법밖에 떠오르지 않습니다.

select *
  from TABLE1 t1
 where HEAD IN (select HEAD from TABLE2 where value = '1')

뭔가 고급기법이 있을듯한데요.. 궁금합니다. 고수분들의 고견을 조금만 나누어주세요

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

with t1 as (
select 'A' head union all
select 'B'      union all
select 'C'
),   t2 as (
select 'A' head, '1' val union all
select 'A'     , '2'     union all
select 'B'     , '1'     union all
select 'B'     , '4'     union all
select 'B'     , '3'     union all
select 'C'     , '6'     union all
select 'C'     , '2'     union all
select 'C'     , '8'
)
select c.*
  from t2 a
     , t1 b
     , t2 c
 where a.val  = '1'
   and a.head = b.head
   and b.head = c.head

知音(sunnylee72)님이 2011-04-25 14:07에 작성한 댓글입니다.

셀프조인인가요? 감사합니다. 늘 건강하십시오 ^^

조중규님이 2011-04-25 19:34에 작성한 댓글입니다. Edit

이건 좀 그런가요..^^;

with table1 as (
select 'A' head union all
select 'B' head union all
select 'C' head
),
table2 as (
select 'A' head, 1 value union all
select 'A' head, 2 value union all
select 'B' head, 1 value union all
select 'B' head, 4 value union all
select 'B' head, 3 value union all
select 'C' head, 6 value union all
select 'C' head, 2 value union all
select 'C' head, 4 value
)
 
select table2.*
from (select head
           , value
        from table2
       where value = 1)
      a
inner join table2 
on a.head = table2.head

JaCkalRedi님이 2011-04-26 16:03에 작성한 댓글입니다. Edit

select *
  from TABLE2
where HEAD IN (select HEAD from TABLE2 where value = '1')

답을 다 찾으셨는데... 자세히 못보신 모양이네요...

from 절에 TABLE1 => TABLE2로 바꾸면 됩니다.

이승철(yamyo)님이 2011-05-11 15:12에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5880세상에 이런일이 ㅠㅠ.. 도저히 이해되지 않습니다. [1]
큰일
2011-04-28
6104
5879검색 조건에서 LIKE절 관련 질문입니다 [1]
JaCkalRedi
2011-04-27
6446
5878내일 MDF파일을 다른 서버로 옮깁니다.
청년재벌
2011-04-25
6696
58771:N관계에서 N테이블에 원하는 값이 있다면 [4]
조중규
2011-04-24
6402
5876레코드 값 합치는 방법 [1]
이수연
2011-04-22
6122
5875이전 레코드와 값이 같은경우 값을 표시하지 않는 방법???? [1]
초보예요
2011-04-20
6485
5874sql server 2008 설치 시 오류
mssql
2011-04-20
8321
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다