4

トップIT業界の1社とのインタビュー中にこの質問をされましたが、まったく手がかりがありませんでした. 誰でも方法を教えてもらえますか? 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 に答える