从3个带有外键的表中选择

时间:2019-06-29 01:26:15

标签: sql foreign-keys

接下来需要显示:表用户名中所有具有“ Admin”位置且位于“ 3RD Floor”位置且带有IN子句的fNAME和lNAME

create table company 
(
    CODE_COMPANY char(30),
    NAME_COMPANY varchar2(30) not null,
    MAIL_COMPANY varchar2(30) null,

    constraint PK_CODE_COMPANY primary key (CODE_COMPANY),
);

create table USERNAME 
(
    NAME_USERNAME varchar2(30),
    USER_LOCATION number,
    fNAME varchar2 (30) not null,
    lNAME varchar2 (30) not null,
    PHONE_USER char(13) null,
    USER_POSITION varchar2 (30),
    check (USER_POSITION in('Admin', 'Superadmin', 'Technician', 'Student')),

    constraint PK_NAME_USERNAME primary key (NAME_USERNAME),
    constraint FK_USER_LOCATION foreign key (USER_LOCATION) references uLOCATION (LOCATION)
);

create table uLOCATION 
(
    LOCATION number,
    CODE_COMPANY char(30),
    NAME_LOCATION varchar2(30) not null,
    FLOOR_LOCATION varchar2(10),
    check (FLOOR_LOCATION in ('MAIN_FLOOR', '1ST FLOOR', '2ND FLOOR', '3RD FLOOR')),

    constraint PK_LOCATION primary key (LOCATION),
    constraint FK_CODE_COMPANY_L foreign key (CODE_COMPANY) references company (CODE_COMPANY),
);

3 个答案:

答案 0 :(得分:2)

SELECT U.fName, U.lName
FROM   USERNAME AS U
WHERE  U.USER_POSITION = 'Admin'
       AND
       U.USER_LOCATION IN (
                          SELECT L.LOCATION 
                          FROM   uLOCATION AS L
                          WHERE  L.FLOOR_LOCATION = '3RD FLOOR'
                          );

答案 1 :(得分:0)

选择fName,lName 来自USERNAME,uLOCATION,COMPANY 其中,uLOCATION.LOCATION = USERNAME.USER_LOCATION和COMPANY.CODE_COMPANY = uLOCATION.CODE_COMPANY;

但是如何指定我需要NAME_COMPANY ABC用户Admin? 如何再添加2个WHERE子句?

答案 2 :(得分:0)

轻微修改NAME_COMPANY的SQLRaptor答案:

SELECT U.fName, U.lName
FROM   USERNAME AS U
WHERE  U.USER_POSITION = 'Admin'
       AND
       U.USER_LOCATION IN (
                          SELECT L.LOCATION 
                          FROM   uLOCATION AS L JOIN COMPANY AS C
                              ON L.CODE_COMPANY=C.CODE_COMPANY
                          WHERE  L.FLOOR_LOCATION = '3RD FLOOR' AND C.NAME_COMPANY = 'ABC'
                          );