안녕하세요..
예를 들어 설명하겠습니다.
옛날 국민학교 다닐적에 같은 반이던 친구만 찾으려고 하거든요.
a,b,c,d,e 라는 다섯명이 있다고 할께염
1학년때는 a,b만 같은반
2학년때는 a,c만 같은반
3학년때는 a,d만 같은반
4학년때는 a,e만 같은반
5학년때는 b,c만 같은반
6학년때는 b,d만 같은반
이렇게 됐을 때..a,b가 같은 반이었던 학년을 찾는 쿼리문은
어떻게 되나염?
쉬울 듯 안 되는데...
그럼 좋은 하루되세요
테이블 구성에 따라 다른수 있을것 같군요.
일단
CREATE TABLE [TABLE1] (
[hakyun] [int] NOT NULL ,
[h_1] [varchar] (50) NULL ,
[h_2] [varchar] (50) NULL
) ON [PRIMARY]
--------------------
hakyun h_1 h_2
1 a b
2 a c
3 a d
4 a e
5 b c
6 b d
이런식으로 입력이 된 테이블이다면
h_1컬럼에 a,b를 가진 자료를 가져온다. --- a
union all (union 은 자료내용이 같으면 distinct 하기 때문에)
h_2컬럼에 a,b를 가진 자료를 가져온다. --- b
만약 a에도 있고 b에도 있으면 그 학년이 같이다녔던 학년이 되겠죠. 결국은 학년의 count가 2이상일때는
같은 학년에 다녔던 경우가 되겠죠.
만약 h_3,h_4,.....늘어날경우는 union 부분에 같은 형식으로 추가해주시면 될듯
이 방법은 하나의 방법입니다. 이게 정답이라고 할수 없고, 테이블을 어떻게 설계하고 자료를 저장하는냐에 따라 쿼리의 내용은 달라 질수 있습니다. 참고만하세요. 응용하시던지.
SELECT hakyun, COUNT(*)
FROM (SELECT hakyun
FROM TABLE1
WHERE h_1 IN ('a', 'b')
UNION ALL
SELECT hakyun
WHERE h_2 IN ('a', 'b')) AS main
GROUP BY hakyun
HAVING COUNT(*) > 1
학생 테이블이 학생코드(UNIQUE),학년,반 의 정보를 갖을 때,
select A.(학년)
from (학생테이블) A, (학생테이블) B
where A.(학생코드) = 'a'
and B.(학생코드) = 'b'
and A.(학년) = B.(학년)
and A.(반) = B.(반);