0

我正在寻找创建一个选择语句。我的问题是我不知道从哪里开始。我正在寻找连接字段表中的名字和姓氏。然后我想从 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

下一次,您应该提供更多信息,例如最小模式。我想它看起来像这样:

创建表字段(
  id INT AUTO_INCREMENT 主键,
  first_name VARCHAR(10),
  姓氏 VARCHAR(10)
);

INSERT INTO 字段(名字,姓氏)
值('fn1','ln1'),('fn2','ln2');

创建表项目(
  id INT AUTO_INCREMENT 主键,
  名称 VARCHAR(10),
  work_id INT
);

插入项目(名称,work_id)
值 ('P1', 1), ('P2', 1), ('P3', 3), ('P4', 2), ('P5', 1);

创建表工作(
  project_id INT,
  field_id INT,
  FOREIGN KEY (project_id) REFERENCES project(id),
  FOREIGN KEY (field_id) REFERENCES field(id)
);

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

您可以简单地使用两个JOIN,如下所示:

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 上加入项目
按项目编号排序;
  1. CONCAT用来连接查询中的两个字段(以获取另一个字段,我称之为field_name)。
  2. 我将两个JOIN与它们各自的ON子句一起使用。

在SQLFiddle上实时查看

编辑:完全误解了你原来的问题,对不起。应该没问题!

于 2012-09-15T17:46:52.093 回答
0

You have to include the 'table in the middle' in the query even though you do not return any values directly from that table:

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

Also note that in the modern world, it is a very (very, very, very) bad idea to use the SSN as primary key or foreign key column in a database. You should use an ID column of some sort (EmployeeID). If you must store the SSN, it should be encrypted, and access should be severely restricted to those with a need to know. It can be a good idea to store the SNN in encrypted form in a separate table (with the corresponding EmployeeID as PK) with severely restricted access,

于 2012-09-15T21:57:50.237 回答