1

このスキーマが与えられた場合:

Emp(eid: integer,ename: string,age: integer,salary: real)
Works(eid:integer,did: integer,pct_time: integer)
Dept(did:integer,budget: real,managerid:integer)

私はこれを思いついた:

SELECT w.did, MIN(e.age) AS Youngest
FROM Works w INNER JOIN Emp e USING (eid)
GROUP BY w.did

各部門の最年少年齢を一覧表示します。しかし、その年齢の人の名前を取得する方法がわかりません。間違った名前が返されるため、このクエリのSELECTリストにenameを追加することはできません。

私はこのようなことを試しましたが、うまくいきません。

SELECT e2.ename, e2.age, w2.did
FROM Emp e2 INNER JOIN Works w2 USING (eid),
    (
    SELECT w.did, MIN(e.age) AS Youngest
    FROM Works w INNER JOIN Emp e USING (eid)
    GROUP BY w.did
    ) MyTable
WHERE e2.eid = eid AND e2.age = Youngest

同じ部門の複数の人が一覧表示されます。

4

4 に答える 4

0

試す:

SELECT e2.ename, e2.age, w2.did
FROM Emp e2 
JOIN Works w2 USING (eid)
JOIN (SELECT w.did, MIN(e.age) AS Youngest
      FROM Works w 
      INNER JOIN Emp e USING (eid)
      GROUP BY w.did) sq
  ON w2.did = sq.did and e2.age = sq.Youngest
于 2013-03-20T18:29:05.577 に答える
0

これでうまくいくはずです。did と minimum age を持つサブクエリを作成し、それを使用して既存の emp テーブルに結合する必要があります

SELECT w.did, ename, e.age AS Youngest
FROM Works w 
    INNER JOIN (SELECT did, MIN(age) minage
            FROM emp e INNER JOIN works w ON e.eid = w.eid
            GROUP BY did) ea
    INNER JOIN Emp e ON w.did = ea.did AND e.age = ea.minage
于 2013-03-20T17:47:00.260 に答える