3

3 つのデータベース テーブル

その他の 3 つのデータベース テーブル

スタッフォードにある各プロジェクトのプロジェクト番号、管理部門番号、部門マネージャーの Lname、住所、および生年月日を選択する必要があるという問題があります。望む結果が得られず困っています。

私は試した:

SELECT PROJECT.PNUMBER, PROJECT.DNUM, EMPLOYEE.LNAME, EMPLOYEE.ADDRESS, EMPLOYEE.BDATE
FROM PROJECT, EMPLOYEE, DEPARTMENT
WHERE PLOCATION = 'STAFFORD' AND DEPARTMENT.MGRSSN = EMPLOYEE.SSN;

そして得た:

+---------+------+---------+---------------------- ---+-----------+
| | PNUMBER | DNUM | LNAME | 住所 | BDATE |
| | 30 | 4 | ウォン | 683 VOSS、ヒューストン、テキサス州 | 2055 年 12 月 8 日 |
| | 10 | 4 | ウォン | 683 VOSS、ヒューストン、テキサス州 | 2055 年 12 月 8 日 |
| | 30 | 4 | ウォレス | 291ベリー、ベレア、テキサス州| 2041 年 6 月 20 日 |
+---------+------+---------+---------------------- ---+-----------+

しかし、私が得るべきだったのは(または私が欲しかったもの)です:

+---------+------+---------+---------------------- ---+-----------+
| | PNUMBER | DNUM | LNAME | 住所 | BDATE |
| | 10 | 4 | ウォレス | 391ベリー、ベレア、テキサス州| 2041 年 6 月 20 日 |
| | 30 | 4 | ウォレス | 291ベリー、ベレア、テキサス州| 2041 年 6 月 20 日 |
+---------+------+---------+---------------------- ---+-----------+

私のSQL文の何が問題なのかを誰かが理解するのを手伝ってくれますか? 申し訳ありませんが、これをフォーマットする方法を理解できませんでした

4

3 に答える 3

4

DEPARTMENT基本的に、との結合を見逃していますPROJECT

where古い構文ではなく、明示的な結合を使用します。

select
  PROJECT.PNUMBER,
  PROJECT.DNUM, 
  EMPLOYEE.LNAME,
  EMPLOYEE.ADDRESS
  -- and so on with the EMPLOYEE fields
from
  PROJECT
inner join
  DEPARTMENT
  on DEPARTMENT.DNUMBER = PROJECT.DNUM
inner join
  EMPLOYEE
  on EMPLOYEE.SSN = DEPARTMENT.MGRSSN
where
  PROJECT.PLOCATION = 'Stafford'

しかし、古い構文では:

select
  PROJECT.PNUMBER,
  PROJECT.DNUM, 
  EMPLOYEE.LNAME,
  EMPLOYEE.ADDRESS
  -- and so on with the EMPLOYEE fields
from
  PROJECT, DEPARTMENT, EMPLOYEE
where
  PROJECT.PLOCATION = 'Stafford'
  and DEPARTMENT.DNUMBER = PROJECT.DNUM -- This was the missing bit
  and EMPLOYEE.SSN = DEPARTMENT.MGRSSN
于 2013-11-10T17:30:37.063 に答える
2

このようなことを試してください

select p.pnumber, d.dnumber,e.lname, e.[address], e.bdate
from department D 
inner join project P on D.dnumber = P.dnum
inner join employee E on e.ssn = D.mgrssn
where p.location = 'STAFFORD'
于 2013-11-10T17:30:29.313 に答える
2

テーブルの結合が正しくありません。プロジェクトには部門に参加する必要がありました。

SELECT p.PNUMBER, p.DNUM, e.LNAME, e.ADDRESS, e.BDATE
FROM Project p
INNER JOIN Department d ON d.DNUMBER = p.DNUM
INNER JOIN Employee e ON e.ssn = d.MGRSSN
WHERE p.PLOCATION = 'STAFFORD';

他の結合タイプについてまだ学んでいないかもしれません。これは、あなたが持っているものに基づいて動作するはずです:

SELECT PROJECT.PNUMBER, PROJECT.DNUM, EMPLOYEE.LNAME, EMPLOYEE.ADDRESS, EMPLOYEE.BDATE
FROM PROJECT, EMPLOYEE, DEPARTMENT
WHERE PLOCATION = 'STAFFORD' 
  AND DEPARMENT.DNUMBER = PROJECT.DNUM
  AND DEPARTMENT.MGRSSN = EMPLOYEE.SSN;
于 2013-11-10T17:30:43.913 に答える