1

関係は次のとおりです。

CREATE TABLE employee (
  name    varchar2(15) not null, 
  ssn      char(9),
  primary key (ssn),
  foreign key (superssn) references employee(ssn),
);

CREATE TABLE project (
  pname      varchar2(15) not null,
  pnumber    number(4),
  primary key (pnumber),
  unique (pname),
);

CREATE TABLE works_on (
  essn   char(9),
  pno    number(4),
  primary key (essn,pno),
  foreign key (essn) references employee(ssn),
  foreign key (pno) references project(pnumber)
);

Q: すべてのプロジェクトで働くすべての従業員の名前を取得します。

プロジェクト名でソートして、プロジェクトに参加しているすべての従業員を照会するように求められていると思います。これにアプローチする方法はありますか?

4

2 に答える 2

1

これは古典的なdivide問題です。

これを試して。

   SELECT name FROM Employee 
    WHERE NOT EXISTS (SELECT pnumber FROM project WHERE pnumber   
      NOT IN (SELECT pno from Works_on WHERE employee.ssn = works_on.essn))

または、すべてのプロジェクトとその従業員に対して、

  SELECT employees.name, project.pname FROM employees 
    INNER JOIN works_on ON employees.ssn = works_on.essn
      INNER JOIN project ON works_on.pno = project.pnumber;
于 2013-04-10T19:46:15.303 に答える
0
SELECT E.NAME FROM
EMPLOYEE E,
PROJECT P,
WORKS_ON WO
WHERE 
E.SSN = WO.ESSN
AND WO.PNO = P.PNUMBER
ORDER BY P.PNAME;

それがうまくいくかどうかを確認してください。

これも試すことができます:

SELECT E.NAME FROM
(SELECT E.NAME, P.PNAME FROM
    EMPLOYEE E,
    PROJECT P,
    WORKS_ON WO
    WHERE 
    E.SSN = WO.ESSN
    AND WO.PNO = P.PNUMBER
    ORDER BY P.PNAME);
于 2013-04-10T19:41:03.470 に答える