如何从 5 个表中选择多个值?

Posted

技术标签:

【中文标题】如何从 5 个表中选择多个值?【英文标题】:How can I SELECT multiple values from 5 tables? 【发布时间】:2016-12-11 15:48:01 【问题描述】:

我想选择链接在表 ASSIGNMENTS 中的 PROJECT_ID、STAFF_ID、HARDWARE_ID 和 SOFTWARE_ID,但我想显示该链接,同时还显示链接到相关 ID 的每个相应表中的所有属性(例如 STAFF_NAME、JOB_TYPE ,来自 STAFF 表的 JOB_GRADE)。这是我的代码:

CREATE TABLE PROJECT
(PROJECT_ID CHAR(5) NOT NULL,
PROJECT_NAME CHAR(20),
PROJECT_TYPE CHAR(20),
START_DATE DATE,
END_DATE DATE,
PRIMARY KEY (PROJECT_ID));

CREATE TABLE HARDWARE
(HARDWARE_ID CHAR(5) NOT NULL,
HARDWARE_NAME CHAR(20),
PRIMARY KEY (HARDWARE_ID));

CREATE TABLE SOFTWARE
(SOFTWARE_ID CHAR(5) NOT NULL,
SOFTWARE_NAME CHAR(20),
PRIMARY KEY (SOFTWARE_ID));

CREATE TABLE STAFF
(STAFF_ID CHAR(5) NOT NULL,
STAFF_NAME CHAR(20),
JOB_TYPE CHAR(20),
JOB_GRADE CHAR(20),
PRIMARY KEY (STAFF_ID));

CREATE TABLE ASSIGNMENTS
(ASSIGNMENT_ID CHAR(5) NOT NULL,
PROJECT_ID CHAR(5),
STAFF_ID CHAR(5),
HARDWARE_ID CHAR(5),
SOFTWARE_ID CHAR(5),
PRIMARY KEY (ASSIGNMENT_ID),
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID),
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID),
FOREIGN KEY (HARDWARE_ID) REFERENCES HARDWARE(HARDWARE_ID),
FOREIGN KEY (SOFTWARE_ID) REFERENCES SOFTWARE(SOFTWARE_ID));

这是一些基本数据:

INSERT INTO PROJECT (PROJECT_ID, PROJECT_NAME, PROJECT_TYPE, START_DATE, END_DATE)
VALUES ('B0001','BIKESHOP.COM','WEB DEVELOPMENT',TO_DATE('15/01/17','DD/MM/YY'),TO_DATE('15/02/17','DD/MM/YY'));

INSERT INTO HARDWARE (HARDWARE_ID, HARDWARE_NAME)
VALUES ('H0001','WEBDEV PC1');

INSERT INTO SOFTWARE (SOFTWARE_ID, SOFTWARE_NAME)
VALUES ('S0001','COFFEECUP IDE');

INSERT INTO STAFF (STAFF_ID, STAFF_NAME, JOB_TYPE, JOB_GRADE)
VALUES ('ST001','JOHN MASON','WEB DEVELOPER','1');

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, HARDWARE_ID, SOFTWARE_ID)
VALUES ('A0001','B0001','ST001','H0001','S0001');

我已使用此代码获取与多个 STAFF_ID 值相关联的 PROJECT_ID,同时还给出了 STAFF_NAME:

SELECT STAFF.STAFF_ID, STAFF.STAFF_NAME, ASSIGNMENTS.PROJECT_ID
FROM ASSIGNMENTS 
INNER JOIN STAFF ON ASSIGNMENTS.STAFF_ID = STAFF.STAFF_ID 
WHERE ASSIGNMENTS.PROJECT_ID = 'B0001';

但是如何从链接到单个 PROJECT_ID 的所有表中选择所有属性?

【问题讨论】:

从...中选择*等? 一个 SELECT 语句可以有多个 JOIN 子句。从您现有的代码(OP 中的最后一个 sn-p)开始,通过它们的主键/外键关系为其他相关表添加连接。 就像 Staff 上的内部连接一样,使用适当的外键连接您需要的其余表,并将所需的属性添加到选择中。似乎有什么问题或困惑? 我应该提到我是 SQL Developer 的新手,我从这里的一位用户那里获得了将 PROJECT_ID 加入到 STAFF_ID 的代码,但我对它的理解还不够好,无法修改上面的代码得到想要的结果。如果我自己能看到代码,我将能够通过阅读它来理解它是如何工作的,但就目前而言,我不知道如何使上述代码适用于这个查询。 【参考方案1】:

这样的大连接:

Select s.staff_name,
H.Hardware_name,
Sf.Software_name,
P.Project_name,
P.Project_type --you get the idea. Select other columns if you need
From assignments a
Inner join staff s on a.staff_id = s.staff_id
Inner join software sf on a.software_id = sf.software_id
Inner join hardware h on a.hardware_id = h.hardware_id
Inner join project p on a.project_id = p.project_id
Where a.project_id = 'A0001';

【讨论】:

以上是关于如何从 5 个表中选择多个值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录

如何从多个表中选择列并在 yii 框架中显示

如何从sql中的四个表中进行选择?

php mysql如何从2个表中选择我需要的[关闭]

如何从 2 个表中选择最近的日期时间

如何从 SQL Server 中包含多行数据的 2 个表中选择 4 个不同的值?