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
운영게시판
최근게시물
MySQL Q&A 29881 게시물 읽기
No. 29881
여러 테이블을 한꺼번에 참조하려고 합니다. 어떤 방법이 좋을까요?
작성자
김갑열(sailer04)
작성일
2011-01-04 15:05
조회수
8,532

변경내역을 저장하는 테이블(T_item_history)에서 변경구분에 따라
다른테이블을 참조하여 가져오려고 합니다.
left join으로 전부 할려고 해도 변경전과 변경후까지 할려면
6번 이상을 조인해야 할꺼 같고...
리스트를 가져와서 각각 쿼리를 날리는것도 너무 무식하게 만드는거 같아서
조언을 구합니다. 


T_change_code  테이블 내용
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c_code        c_name
---------------------------------------
c1            관리자변경
c2            사용자변경
c3            위치변경
c4            카테고리변경
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


T_user (사용자 및 관리자 테이블)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
u_code         u_name
---------------------------------------
u1              김씨
u2              이씨
u3              박씨


T_location (위치 테이블)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
l_code        l_name
---------------------------------------
l1             1층
l2             2층
l3             3층


T_category  (카테고리 테이블)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c_code         c_name
---------------------------------------
ca1             컴퓨터
ca2             프린터
ca3             모니터

 

T_item_history 테이블 구성
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
changeCode    변경구분
boforeCode    변경전코드
afterCode     변경코드
changeDate    변경일자
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
changeCode    boforeCode      afterCode    changeDate
---------------------------------------
c1            u1              u3           2011-01-01
c3            l3              l1           2011-01-02
c4            ca2             ca1          2011-01-03

이 데이터를 이렇게 가져오고 싶습니다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
변경구분1        변경전       변경후        변경일자
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
관리자변경        김씨         박씨        2011-01-01
위치변경          3층          1층         2011-01-02
카테고리변경      프린터       컴퓨터      2011-01-03

 

이 글에 대한 댓글이 총 1건 있습니다.
아름다운 방법(?)은 아니지만, 뷰를 활용하여 쿼리를 좀 줄여보았습니다.
 
// 뷰 생성
CREATE VIEW code_name AS
SELECT u_code AS code, u_name AS name FROM T_user
UNION ALL 
SELECT l_code AS code, l_name AS name FROM T_location
UNION ALL 
SELECT c_code AS code, c_name AS name FROM T_category;

// 쿼리
SELECT
    c.c_name AS changeCode,
    x1.name AS beforeCode,
    x2.name AS afterCode,
    h.changeDate
FROM
    T_item_history AS h,
    T_change_code AS c,
    code_name AS x1, 
    code_name AS x2
WHERE
    c.c_code = h.changeCode
    AND x1.code = h.beforeCode
    AND x2.code = h.afterCode;
 
박현우(lqez)님이 2011-01-06 18:16에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
29884mysql도 DB 결점이 있는건가요?? 서버 잘아시는분들 답변 부탁드려요! [4]
아름이
2011-01-08
8372
29883삭제한 데이터를 복구하고 싶습니다. [3]
안혜진
2011-01-07
15739
29882C, MYSQL 연결이 계속 지속 될경우 문제점...? [4]
지종현
2011-01-05
11620
29881여러 테이블을 한꺼번에 참조하려고 합니다. 어떤 방법이 좋을까요? [1]
김갑열
2011-01-04
8532
29880python > MySQLdb.connect() > password 없이 접속 부분중 오류가 발생하였습니다. [2]
정성철
2011-01-04
8859
29879서버복구 [1]
shkim
2011-01-03
8224
29878도와주세요!! 한방쿼리로 해결하고 싶은데 잘 안되네요!! [1]
MyEeMa
2010-12-30
8325
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다