Mysql 如何在两个表之间加入当另一个在中间不使用的时候?

Mysql 如何在两个表之间加入当另一个在中间不使用的时候?,mysql,sql,join,Mysql,Sql,Join,我希望创建一个select语句。我的问题是我不知道从哪里开始。我希望从字段表中连接名字和姓氏。然后我想从项目表中获取项目编号和项目名称。关系是字段1:N工作N:1项目。我不知道如何在中间加入工作表。 CREATE TABLE project ( proNumber SMALLINT not null , proName VARCHAR(25), proLocation VARCHA

我希望创建一个select语句。我的问题是我不知道从哪里开始。我希望从字段表中连接名字和姓氏。然后我想从项目表中获取项目编号和项目名称。关系是字段1:N工作N:1项目。我不知道如何在中间加入工作表。

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)
);

下一次,您应该提供更多信息,比如最小模式。 我想是这样的:

CREATE TABLE field ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(10), last_name VARCHAR(10) ); INSERT INTO field (first_name, last_name) VALUES ('fn1', 'ln1'), ('fn2', 'ln2'); CREATE TABLE project ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10), work_id INT ); INSERT INTO project (name, work_id) VALUES ('P1', 1), ('P2', 1), ('P3', 3), ('P4', 2), ('P5', 1); CREATE TABLE work ( 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); SELECT CONCAT(field.first_name, ' ', field.last_name) AS field_name, project.name AS project_name, project.id AS project_number FROM work JOIN field ON field.id = work.field_id JOIN project ON project.id = work.project_id ORDER BY project_number; 我使用CONCAT将查询中的两个字段连接起来,以获得另一个字段,我称之为field_name。 我使用了两个JOIN和它们各自的ON子句。 看


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

即使不直接从该表返回任何值,也必须在查询中包含“中间的表”:

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用作数据库中的主键或外键列是一个非常非常糟糕的主意。您应该使用某种类型的EmployeeID的ID列。如果必须存储SSN,则应该对其进行加密,并且应该严格限制那些需要知道的人的访问。最好将SNN以加密形式存储在一个单独的表中,相应的EmployeeID为PK,访问受到严格限制,

您能发布您的模式以便我们确定表之间的关系吗?我完全搞不清楚这是返回一个空集。我想我需要作业表上的信息这一点被遗漏了。字段表有名字和姓氏。工作表有工作项目编号。项目表包含项目编号和名称。我试图得到的人的名字和姓氏和项目名称和他们的工作编号。我现在真的很困惑。对不起,我试图在我的帖子中修复它。但是如果你发布你的SQL模式,而不是用纯文本描述它呢?我描述了我的表,希望能有所帮助。