마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

DB SQL문 작성 도와주세요ㅠㅠ

0 추천
MYINFO
ID(PK)/CmpID(FK)/NAME/POSITION/PhoneNumber
0 / 1 / 홍길동1 / 사원 / 010-1234-5678
1 / 1 / 홍길동2 / 사원 / 010-1234-5678
2 / 2 / 홍길동3 / 사원 / 010-1234-5678
3 / 3 / 홍길동4 / 사원 / 010-1234-5678
4 / 3 / 홍길동5 / 사원 / 010-1234-5678
5 / 4 / 홍길동6 / 사원 / 010-1234-5678
6 / 5 / 홍길동7 / 사원 / 010-1234-5678

CMPINFO
ID(PK)/CmpName/OfficeName
1 / (주)고조선 / 한국1
2 / (주)고조선 / 한국2
3 / (주)고조선 / 한국3
4 / (주)한나라 / 중국1
5 / (주)한나라 / 중국2

ex)홍길동4가 사무실과 관련없이 자신의 회사의 모든 사원들을 찾는다 = CmpName이 "(주)고조선"인 모든 사람을 찾는다
결과
홍길동1
홍길동2
홍길동3
홍길동4
홍길동5

 

조인을 해야하긴하는데 어떻게 해야할지 막막합니다... 고수님들 조언부탁드립니다

물론 CmpID(자식코드)를 따로 만드는 방법도 있는데 이를 추가하면 모든 insert문도 다 바꿔주어야합니다ㅜㅜ
Jou (160 포인트) 님이 2018년 9월 28일 질문

1개의 답변

0 추천
일단 테이블 정규화를 다시 하는 것을 추천합니다.

모든 쿼리문 변경이 있더라도 하는 것을 추천합니다.

나중에 가면 오히려 더 어렵고 쿼리문만 복잡해 지고 속도도 느려집니다.

 

현 상태에서 찾으려면 홍길동4가 속한 회사에 대해서 이름으로 비교하여

CMPINFO 테이블의 ID 1, 2, 3을 뽑아 와야 합니다.

select ID

from CMPINFO

where CmpName = (

                                 select CmpName

                                 from CMPINFO

                                 where ID = (select CmpID from MYINFO where NAME = "홍길동4")

                                 )

 

이렇게 하면 홍길동4가 속한 회사의 ID 값 1, 2, 3 이 나옵니다. 이 쿼리 문을 A라 고 합니다.

 

그러면 최종 쿼리문은 myinfo 테이블에서 cmpid 가 1, 2, 3  인 사원만 출력하면 됩니다.

select * from MYINFO where CmpID in (A)  입니다.
원조안드로이드 (58,190 포인트) 님이 2018년 9월 28일 답변
...