如何从2个表中选择多个值? SQL Developer

时间:2016-12-11 12:07:29

标签: sql database oracle oracle-sqldeveloper

我想选择STAFF_IDSTAFF_NAMEPROJECT_IDSTAFF_IDPROJECT_ID已在表格ASSIGNMENTS中关联,但我想显示该链接,同时还显示{{1}中每个STAFF_NAME的{​​{1}}表。这是我的代码:

STAFF_ID

所有表格都填充了数据,这是我目前使用的查询,显示哪些员工在给定项目上工作(但只有STAFF_ID,而不包括STAFF_NAME):

STAFF

我如何显示这样的链接,同时还包括从STAFF表链接到STAFF_ID的STAFF_NAME?

以下是每个表格中一行的一些数据:

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 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),
PRIMARY KEY (ASSIGNMENT_ID),
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID),
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID));

我要展示的是SELECT STAFF_ID, PROJECT_ID FROM ASSIGNMENTS WHERE PROJECT_ID = 'B0005'; 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 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'); PROJECT_ID。只有三列显示这3个值。

3 个答案:

答案 0 :(得分:1)

您只需要将连接添加到STAFF表。像这样的东西

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 = 'B0005';

答案 1 :(得分:0)

我认为这个选择可以解决你的问题

bool CheckIfAvailable(HashSet<int> hayStack1, HashSet<int> hayStack2, int needle) 
{
    if(hayStack1 == null && hayStack2 == null)
    {
        return true;
    }
    else if(hayStack1 != null && hayStack1.Contains(needle))
    {
        return true;
    }
    else if(hayStack2 != null && hayStack2.Contains(needle))
    {
        return true;
    }
    return false;
}

答案 2 :(得分:0)

为了实现这一需求,请按以下方法加入三个表:

通用语法:

select *
from
    tableA a
        inner join
    tableB b
        on a.common = b.common
        inner join 
    TableC c
        on b.common = c.common

所以请按照下一个查询:

 select a.PROJECT_ID, b.STAFF_ID, c.STAFF_NAME
 from PROJECT a inner join ASSIGNMENTS b
 on a.PROJECT_ID = b.PROJECT_ID
 inner join STAFF c
 on c.STAFF_ID = b.STAFF_ID

<强>结果:

enter image description here

相关问题