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 30070 게시물 읽기
No. 30070
mysql 쿼리 문의드립니다.
작성자
최범선(mysql초보나라)
작성일
2011-10-11 16:08ⓒ
2011-10-11 17:08ⓜ
조회수
8,124

안녕하세요

혼자 mysql 독학중인 mysql초보입니다..

나름대로 정규화를 해보고 다시 쿼리를 가져오려하니 여러가지 애로사항이 많네요.

질문 드리겠습니다

테이블 : office
+------+--------+
| pid  | pName  |
+------+--------+
| P1   | 명동점 |
| P2   | 종로점 |
| P3   | 강남점 |
| P4   | 목동점 |
| P5   | 건대점 |
+------+--------+

 CREATE  TABLE `office` (

  `pid` VARCHAR(10) NOT NULL ,

  `pName` VARCHAR(45) NULL ,

  PRIMARY KEY (`pid`) );


INSERT INTO `office` (`pid`, `pName`) VALUES ('p1', '명동점');

INSERT INTO `office` (`pid`, `pName`) VALUES ('p2', '종로점');

INSERT INTO `office` (`pid`, `pName`) VALUES ('p3', '강남점');

INSERT INTO `office` (`pid`, `pName`) VALUES ('p4', '목동점');

INSERT INTO `office` (`pid`, `pName`) VALUES ('p5', '건대점');

 

 

테이블 : category
+------+--------+
| cid  | cName  |
+------+--------+
| C1   | 사과   |
| C2   | 바나나 |
| C3   | 배     |
| C4   | 포도   |
| C5   | 키위   |
+------+--------+

CREATE  TABLE `category` (

  `cid` VARCHAR(10) NOT NULL ,

  `cName` VARCHAR(45) NULL ,

  PRIMARY KEY (`cid`) );


INSERT INTO `category` (`cid`, `cName`) VALUES ('c1', '사과');

INSERT INTO `category` (`cid`, `cName`) VALUES ('c2', '바나나');

INSERT INTO `category` (`cid`, `cName`) VALUES ('c3', '배');

INSERT INTO `category` (`cid`, `cName`) VALUES ('c4', '포도');

INSERT INTO `category` (`cid`, `cName`) VALUES ('c5', '키위'); 

 

 

테이블 : sub
+------+--------+
| cid  | pid    |
+------+--------+
| C1   |  P1    |
| C2   |  P1    |
| C3   |  P1    |
| C4   |  P2    |
| C1   |  P3    |
| C2   |  P3    |
| C1   |  P4    |
| C3   |  P4    |
| C4   |  P4    |
| C5   |  P5    |
+------+--------+

CREATE  TABLE `sub` (

  `cid` VARCHAR(10) NOT NULL ,

  `pid` VARCHAR(10) NOT NULL ,

  PRIMARY KEY (`cid`, `pid`) );


INSERT INTO `sub` (`cid`, `pid`) VALUES ('c1', 'p1');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c2', 'p1');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c3', 'p1');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c4', 'p2');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c1', 'p3');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c2', 'p3');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c1', 'p4');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c3', 'p4');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c4', 'p4');

INSERT INTO `sub` (`cid`, `pid`) VALUES ('c5', 'p5');

 

이런 3개의 테이블이 있습니다.

아래와 같은 쿼리를 이용해서 데이터를 아래와 같이 얻어왔습니다.

select p.pid,p.pName,group_concat(c.cName) as Cnames
from
office as p,
sub as s,
category as c

where p.pid = s.pid
and s.cid = c.cid
group by p.pid;

+------+--------+-----------------+
| pid  | pName  | cNames          |
+------+--------+-----------------+
| P1   | 명동점 | 사과,바나나,배  |
+------+--------+-----------------+
| P2   | 종로점 | 포도            |
+------+--------+-----------------+
| P3   | 강남점 | 사과,바나나     |
+------+--------+-----------------+
| P4   | 목동점 | 사과,바나나,포도|
+------+--------+-----------------+
| P5   | 건대점 | 키위            |
+------+--------+-----------------+

 

 

여기에서 문의 드립니다.
검색조건을 cNames like '%사과%' 이렇게 한 경우

select p.pid,p.pName,group_concat(c.cName) as Cnames
from
office as p,
sub as s,
category as c

where p.pid = s.pid
and s.cid = c.cid
and concat(c.cName) like '%사과%' <---- where 조건 추가
group by p.pid;

+------+--------+-----------------+
| pid  | pName  | cNames          |
+------+--------+-----------------+
| P1   | 명동점 | 사과            |
+------+--------+-----------------+
| P3   | 강남점 | 사과            |
+------+--------+-----------------+
| P4   | 목동점 | 사과            |
+------+--------+-----------------+

이렇게 결과값을 가져옵니다.

 

 

저는 아래와 같은 결과값이 나오길 바라는데요..

+------+--------+-----------------+
| pid  | pName  | cNames          |
+------+--------+-----------------+
| P1   | 명동점 | 사과,바나나,배  |
+------+--------+-----------------+
| P3   | 강남점 | 사과,바나나     |
+------+--------+-----------------+
| P4   | 목동점 | 사과,바나나,포도|
+------+--------+-----------------+

 

 

위와 같은 쿼리를 안쓰더라도 제가 원하는 결과 값을 얻는 방법이 있을까요??

그리고 mysql query 관련 서적이 있으면 추천부탁합니다.

좋은 하루 되세요..!!

 

 

 

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

SELECT ofc.pid, ofc.pName, group_concat( ct2.cName ) AS Cnames
FROM category AS ct1
INNER JOIN sub AS sb1 ON ct1.cid = sb1.cid AND ct1.cName = '사과'
INNER JOIN office AS ofc ON ofc.pid = sb1.pid
INNER JOIN sub AS sb2 ON ofc.pid = sb2.pid
INNER JOIN category AS ct2 ON sb2.cid = ct2.cid
GROUP BY ofc.pid, ofc.pName
;
 

쫌 지저분해 보여서 맘에 들진 않지만.. ㅋ

우욱님이 2011-10-17 05:18에 작성한 댓글입니다.
이 댓글은 2011-10-17 05:20에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
30077der typ von Feld 에러
김양훈
2011-10-18
7966
30072group by... [1]
안용재
2011-10-14
8060
300711067 프로세스 비정상종료 오류에 대해서... [1]
박의호
2011-10-14
9080
30070mysql 쿼리 문의드립니다. [1]
최범선
2011-10-11
8124
30069JOIN 관련 문의 드립니다. 머리가 터지려고 하네요.. ㅡㅡ;; [1]
김상묵
2011-10-11
7991
30068double형 문제 - 간단하니 테스트라도 부탁드립니다.
박종선
2011-10-10
7398
30067재고 계산에 대해 질문드립니다ㅜㅜ [3]
sleee
2011-10-10
7516
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다