4

我在接受顶级 IT 行业之一的采访时被问到这个问题,我完全不知道。谁能告诉我怎么做?Mysql 或 Oracle 都可以,但我提供的是 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 范式。与会者将会议和参与的员工(包括员工和经理)联系起来。

问题是编写一个查询,找出员工和他的经理都参加的会议

4

3 回答 3

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
于 2013-11-25T22:06:52.007 回答
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
于 2013-11-25T22:29:10.103 回答
0

试试这个,a 和 b 参加的会议,b 是 a 的经理

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
于 2013-11-25T22:26:04.750 回答