2013-11-25 3 views
4

IT 업계 최고 전문가와의 인터뷰에서이 질문을 받았으며 단서가 없었습니다. 아무도 말해 줄 수 있니? MySQL이나 오라클은 괜찮지 만 MySQL에 예제를 제공하고 있습니다.매우 정규화 된 주어진 테이블을 사용하여 질문을 작성했습니다. 인터뷰 도중 질문했습니다.

CREATE TABLE employee (employee_ID VARCHAR(5), manager_ID VARCHAR(5)); 

CREATE TABLE meeting (meeting_ID VARCHAR(1), meeting_title VARCHAR(100)); 

CREATE TABLE attendee (meeting_ID VARCHAR(1), employee_ID VARCHAR(5)); 

이 관계는 예제와 함께 매우 간단합니다. 나는 이것이 3 정규형까지 꽤 정규화 된 예제라고 생각한다. 참석자는 회의 및 직원 및 관리자를 포함한 참여 직원을 연결합니다.

질문은 이고 직원과 그의 관리자가 참석하는 회의는입니다.

+8

아마도 ID 열의 데이터 유형을 완전히 미친 선택으로 언급했는지 확인하는 테스트 였을 것입니다. –

+0

나는 동의하지만, 실생활에서 슬프게 이런 것을 보았다. – user2366842

+0

나는 그들이 얼마나 많은 모임을 가질 것으로 예상하는지 궁금해. CHAR 길이 의미가 사용된다면, VARCHAR2 (1)은 최대 4,294,967,296 개의 다른 값을 저장할 수 있다고 생각합니다. –

답변

2

이런 식으로 뭔가가 작동합니다 :

SELECT m.* 
FROM meeting m 
INNER JOIN attendee a a.meeting_ID = m.meeting_ID 
INNER JOIN employee e ON e.employee_ID = a.employee_ID 
WHERE (a.meeting_ID,e.manager_ID) IN (SELECT meeting_ID,employee_ID FROM antendee) 

또는 (아마 더 나은)

SELECT m.* 
FROM meeting m 
INNER JOIN attendee a a.meeting_ID = m.meeting_ID 
INNER JOIN employee e ON e.employee_ID = a.employee_ID 
INNER JOIN attendee am ON am.employee_ID = e.manager_ID AND am.meeting_ID = a.meeting_ID 
+0

감사합니다 Andrei. 두 가지 모두 효과적 일 수 있습니다. – user3034116

0

는,이 시도 a와 b와 b 참석 회의 것은

SELECT m.* 
FROM meeting m 
    JOIN attendee a a.meeting_ID = m.meeting_ID 
    JOIN attendee b b.meeting_ID = m.meeting_ID AND a.employee_ID <> b.employee_ID 
    JOIN employee e ON e.employee_ID = a.employee_ID AND e.manager_ID = b.employee_ID 
의 관리자입니다
2

회의 이름 만 필요하면 다음 쿼리를 사용할 수 있습니다.

SELECT DISTINCT meeting.meeting_title 
FROM 
    attendee a1 INNER JOIN employee e ON a1.employee_ID=e.employee_ID 
    INNER JOIN attendee a2 ON e.manager_ID=a2.employee_ID 
    INNER JOIN meeting ON a1.meeting_ID = meeting.meeting_ID 
WHERE 
    a1.meeting_ID=a2.meeting_ID