0

selectステートメントを作成しようとしています。私の問題は、どこから始めればよいかわからないことです。フィールドテーブルから姓名を連結しようとしています。次に、Project テーブルからプロジェクト番号とプロジェクト名を取得します。関係は(フィールド 1:N ワーク N:1 プロジェクト)です。Work テーブルを真ん中に結合する方法がわかりません。

CREATE TABLE project (
    proNumber                SMALLINT not null ,
    proName                  VARCHAR(25), 
    proLocation              VARCHAR(25) NULL,
    proDeptNumber           SMALLINT,
constraint   pkProj   primary key(proNumber)
);

CREATE TABLE Field (
    SSN                   CHAR(9) ,
    LastName             VARCHAR(25),
    FirstName            VARCHAR(25),
    MiddleName           VARCHAR(25) NULL,
    Address               VARCHAR(50) NULL,
    City                  VARCHAR(25) NULL,
    State                 CHAR(2) NULL,
    Zip                   CHAR(9) NULL,
    DateOfBirth         DATETIME NULL,
    Salary                FLOAT(8,2) not null,  
    ParkingSpace         INT,
    Gender                CHAR(1) NULL,
    DptNumber            SMALLINT,
    SuperID              CHAR(9),
constraint   pkField  PRIMARY KEY(ssn)
);

CREATE Work (
    workEmpSSN              CHAR(9) not null,
    workProNumber           SMALLINT not null,
    workHours                DECIMAL(5,1) NULL,
    workHoursPlanned        DECIMAL(5,1) NULL,
constraint  pkAssign   PRIMARY KEY (workEmpSSN, workProNumber)
);
4

2 に答える 2

2

次回は、最小限のスキーマなど、より多くの情報を提供する必要があります。次のようになっていると思います。

CREATE TABLE フィールド (
  id INT AUTO_INCREMENT PRIMARY KEY,
  first_name VARCHAR(10),
  last_name VARCHAR(10)
);

INSERT INTO フィールド (名、姓)
値 ('fn1', 'ln1'), ('fn2', 'ln2');

CREATE TABLE プロジェクト (
  id INT AUTO_INCREMENT PRIMARY KEY,
  名前 VARCHAR(10),
  work_id INT
);

INSERT INTO プロジェクト (名前、work_id)
値 ('P1', 1), ('P2', 1), ('P3', 3), ('P4', 2), ('P5', 1);

CREATE TABLE 作業 (
  project_id INT、
  field_id INT、
  FOREIGN KEY (project_id) REFERENCES project(id),
  FOREIGN KEY (field_id) REFERENCES フィールド (id)
);

INSERT INTO work (project_id, field_id) VALUES (1, 1), (1, 2), (2, 1), (3, 1), (3, 2);

JOIN次のように、単純に two を使用できます。

SELECT CONCAT(field.first_name, ' ', field.last_name) AS field_name, project.name AS project_name, project.id AS project_number
仕事から
JOIN フィールド ON field.id = work.field_id
project.id = work.project_id でプロジェクトに参加
ORDER BY project_number;
  1. CONCATクエリから 2 つのフィールドを連結するために使用しています (別のフィールドを取得するために、これを と呼びますfield_name)。
  2. 私はJOINそれぞれのON句で2つを使用しています。

SQLFiddle でライブを参照してください。

編集:元の質問を完全に誤解しています。申し訳ありません。これでいいはず!

于 2012-09-15T17:46:52.093 に答える
0

そのテーブルから直接値を返さない場合でも、クエリに「中央のテーブル」を含める必要があります。

SELECT f.FirstName, f.LastName, p.proNumber, p.proName
  FROM Field   AS f
  JOIN Work    AS w ON f.SSN = w.workSSN
  JOIN Project AS p ON p.proNumber = w.workProNumber

また、現代の世界では、SSNをデータベースの主キーまたは外部キー列として使用することは非常に(非常に非常に非常に)悪い考えであることに注意してください。ある種のID列(EmployeeID)を使用する必要があります。SSNを保存する必要がある場合は、暗号化する必要があり、アクセスは知る必要のある人に厳しく制限する必要があります。アクセスが厳しく制限された別のテーブル(対応するEmployeeIDをPKとして)に暗号化された形式でSNNを保存することをお勧めします。

于 2012-09-15T21:57:50.237 に答える