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 3602 게시물 읽기
No. 3602
테이블 Join문제입니다. (도와주세요ㅠㅠ)
작성자
작성일
2007-07-03 19:07
조회수
2,997

MS SQL은 잘 안써봤는데..
테이블 조인하는데 이렇게 해결이 안되기는 또 처음이네요..

A 테이블에  회원고유번호, 회원명이 있고
B 테이블에 회원고유번호, 통화날짜

이렇게 있을떄..
A의 테이블은 Unique한 회원고유번호가 있고 B테이블은  여러건의 회원아이디를 가질 수 있겠죠.


두개의 테이블을 조인하여 통화날짜별로 조회하려면..

Select B.고유번호, B.회원명, B.통화날짜
from A , B
where A.고유번호 = B.고유번호
group by B.고유번호

이렇게 하면 되는거 아닌가요?

근데 이렇게하면
Sql Enterprise Manger에서

Select B.고유번호, B.회원명, B.통화날짜
from A INNER JOIN B on A.고유번호 = B.고유번호
group by B.고유번호

그런후에 query 를 실행하면

". B.통화날짜 열이 집계함수나 group by 절에 없으므로 select 목록에서 사용할수 없습니다" 이렇게 나옵니다.

이 말만 보면 group by에 사용된 열의 집계함수(max 나 카운트 등)를 사용해야된다는 얘기인데..
그렇다면 select 에서 찾을게 수십개가 되는데 그걸 모두 group by 해야된다는 말도안되는 상황이... ㅠㅠ

distinct도 사용해보았는데 join할 경우는 distinct함수가 안먹던데요.

테이블조인이 이렇게 복잡해서야..

고수님들의 조언을 바랍니다.

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

1:n 관계의 조인결과 row수는 n개가 됩니다.
이걸 고유번호, 회원명, 통화날짜별로 한줄로 합치겠다고 Group By를 쓰신 것 같은데, 
그 목적이라면 반드시 통화날짜까지 다 들어가야 고유번호, 회원명, 통화날짜별 1row로 합쳐집니다.

이런 자료구조라면 조인대상을 줄이기 위해 조인전 n개 쪽을 먼저 통화날짜별로 Grouping한 후 조인하여 scan이나 disk i/o량을 줄이는 테크닉도 활용해 볼만한 가치가 있습니다.

Group By가 필요없다면 빼던지...아니면 통화날짜까지...^^;

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

성시현(finecomp)님이 2007-07-04 15:27에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
3606[긴급]Join 문제입니다. [1]
김현지
2007-07-04
2789
3605Self join 문제(도와 주세요) [2]
고형석
2007-07-04
2436
3603mdf, ldf 메모장으로 수정이 가능한가요?? [1]
빛의바다
2007-07-03
2844
3602테이블 Join문제입니다. (도와주세요ㅠㅠ) [1]
2007-07-03
2997
3601테이블 설계 조언을 부탁합니다. [1]
이상철
2007-07-03
2432
3600insert 시에 이진 데이터 잘립니다 할때 잘려도 억지로 insert 되게.. [3]
초보
2007-07-03
8336
3599균등 SELECT
장대서
2007-07-03
2240
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다