안녕하세요
혼자 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 관련 서적이 있으면 추천부탁합니다.
좋은 하루 되세요..!!
|