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 27665 게시물 읽기
No. 27665
SQL SELECT문 질문드립니다.
작성자
박세진(flameuser)
작성일
2008-07-09 08:39
조회수
4,525

Create table seat
(
 seat_num Integer NOT NULL,
 seat_grade Char(10) NULL,
 price_code Char(20) NOT NULL,
Primary Key (seat_num)
);

 

Create table price
(
 seat_vip Integer NULL,
 seat_R Integer NULL,
 seat_S Integer NULL,
 seat_A Integer NULL,
 seat_B Integer NULL,
 price_code Char(20) NOT NULL,
Primary Key (price_code)
);

 

Alter table seat add  foreign key(price_code) references price (price_code)  on update no action on delete no action;

 

Insert into price(seat_vip, seat_R, seat_S, seat_A, seat_B, price_code) values (100000,80000,60000,40000,20000,'p001');


Insert into seat(seat_num, seat_grade, price_code) values ('3','seat_VIP','p001');

 

위의 방식대로 테이블을 생성 하면 seat테이블에는 좌석 번호와 좌석 등급, 등급 코드(외래키) 가 들어가게 되고

price테이블에는 각 등급별 가격이 등급 코드와 함께 입력이 됩니다.

seat 테이블
─────┬─────┬──────┐
seat_num │seat_grade│ price_code │
──────────────────┤
      3            seat_VIP          p001      │
──────────────────┤

price테이블
─────┬─────┬─────┬─────┬─────┬─────┬
  seat_vip │   seat_R   │   seat_S   │  seat_A   │   seat_B   │price_code│
───────────────────────────────────┤
  100000         80000           60000           40000          20000           p001      │
───────────────────────────────────┤

SELECT문을 이용해서 seat테이블의 3번 테이블을 선택하면 3번 테이블이 VIP석이기 때문에 price테이블의 100000원을 출력하게 할순 없을까요???

 

///////////////////////////////////////////////////////////////////////////////////

 

select seat_vip
from price, seat
where price.price_code = seat.price_code
and seat.seat_num ='3';

 

////////////////////////////////////////////////////////////////

 

위의 코드를 실행하면 seat_vip값인 100000이 출력되는데

 

그런 방식이 아닌 seat.price_code에 들어있는 값을 찾아 price테이블의 투플로 인식하게 할수 있습니까??

 

////////////////////////////////////////////////////////////////////

select price.(values(seat.seat_grade))

from price, seat
where price.price_code = seat.price_code
and seat.seat_num ='3';

/////////////////////////////////////////////////////////////////

혹시 이게 될까 싶어 해봤는데 안돼더군요... 이게 실행되기 위해 코드를 어케 바꾸면 좋을까요..

 

좋은 답변 부탁드립니다.

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

지금이 너무 늦지 않은 시점이라면 빨리 price 테이블을 다음과 같은 구조로 변경하는 것을 검토해 보세요.

price_code Char(20)  <= FK
seat_grade Char(10)
seat_price integer
PK: price_code, seat_grade

그러면 문제가 쉽게 해결 되고 정규화 법칙도 만족하는 테이블이 됩니다.

어쨌거나 이미 사방군데에 퍼져 있어서 당장 고치기 힘든 상태라면 원하시는 결과는 아래와 같이 구할 수 있습니다.

--복사용 테이블 생성
CREATE TABLE IF NOT EXISTS copy_t
(
 no INT auto_increment,
 PRIMARY KEY ( no )
);

--복제 값 입력
TRUNCATE TABLE copy_t;
INSERT INTO copy_t() VALUES();
INSERT INTO copy_t() VALUES();
INSERT INTO copy_t() VALUES();
INSERT INTO copy_t() VALUES();
INSERT INTO copy_t() VALUES();

--중간 테이블 미리 보기
SELECT price_code,
CASE cpt.no WHEN 1 THEN 'seat_vip'
WHEN 2 THEN 'seat_R'
WHEN 3 THEN 'seat_S'
WHEN 4 THEN 'seat_A'
WHEN 5 THEN 'seat_B'
END AS seat_grade,
CASE cpt.no WHEN 1 THEN seat_vip
WHEN 2 THEN seat_R
WHEN 3 THEN seat_S
WHEN 4 THEN seat_A
WHEN 5 THEN seat_B
END AS seat_price
FROM price CROSS JOIN copy_t AS cpt
WHERE cpt.no < 6
;

--최종결과
SELECT aa.price_code, aa.seat_grade, bb.seat_price
FROM seat AS aa
INNER JOIN
(
SELECT price_code,
CASE cpt.no WHEN 1 THEN 'seat_vip'
WHEN 2 THEN 'seat_R'
WHEN 3 THEN 'seat_S'
WHEN 4 THEN 'seat_A'
WHEN 5 THEN 'seat_B'
END AS seat_grade,
CASE cpt.no WHEN 1 THEN seat_vip
WHEN 2 THEN seat_R
WHEN 3 THEN seat_S
WHEN 4 THEN seat_A
WHEN 5 THEN seat_B
END AS seat_price
FROM price CROSS JOIN copy_t AS cpt
WHERE cpt.no < 6
) AS bb ON aa.price_code = bb.price_code AND aa.seat_grade = bb.seat_grade
WHERE seat_num = 3;

열을 행으로( http://blog.naver.com/uook_/130032190655 ) 참조

우욱님이 2008-07-10 13:08에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
27669이런경우는 어떻게 해야 합니까? [1]
debbie
2008-07-10
4321
27667에러가 나는데 원인을 모르겟습니다... ;; [1]
초보
2008-07-09
3563
27666mysql 에러메세지 검토 부탁드립니다.. [1]
손관현
2008-07-09
3909
27665SQL SELECT문 질문드립니다. [1]
박세진
2008-07-09
4525
27664[mysql] Incorrect key file for table 에러 [1]
지성공자
2008-07-09
4843
27663쿼리문 오류좀 잡아주세요...ㅜ.ㅜ. [1]
쌩초보
2008-07-08
3994
27662MySql 외래키(참조) 관련 [1]
각구렌져
2008-07-08
3950
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다