SQL - 查询关联3个不同的表和弱实体

时间:2016-04-09 15:55:27

标签: mysql sql database oracle join

我在Oracle SQL Developer上做了一个数据库,作为一项任务的一部分,我在查询时遇到了一些问题,我需要列出为给定类型的公司安装的所有传感器。< / p>

我使用的表格如下:

CREATE TABLE Company
  (
    IDempresa       INTEGER NOT NULL ,
    Nome            VARCHAR2 (64) ,
    Localizacao     VARCHAR2 (64) ,
    TipoEmpresa_IDE INTEGER NOT NULL
  ) ;
ALTER TABLE Company ADD CONSTRAINT Company_PK PRIMARY KEY ( IDempresa ) ;

CREATE TABLE Sensor
  (
    ID_sensor      INTEGER NOT NULL ,
    Cost          NUMBER ,
    TipoSensor_IDS INTEGER NOT NULL ,
    Precisao FLOAT ,
    Infra_IDinf INTEGER NOT NULL
  ) ;
ALTER TABLE Sensor ADD CONSTRAINT Sensor_PK PRIMARY KEY ( ID_sensor ) ;

CREATE TABLE TypeCompany
  (
    IDE         INTEGER NOT NULL ,
    Name        VARCHAR2 (64) ,
    AreaService VARCHAR2 (64)
  ) ;
ALTER TABLE TypeCompany ADD CONSTRAINT TypeCompany_PK PRIMARY KEY ( IDE ) ;

基本上我需要的是获得给定服务区域的所有传感器的列表。问题是服务区域属于公司表的类型,它起源于许多公司(1到n关系),然后以m到n的关系绑定到传感器本身。

所以我的问题是我可以选择两个表之间的天然连接,但现在我卡住了,因为我不知道我是否必须使用局部变量来存储id,因为我得到它们(如果有意义的)将我需要的4个表(公司类型,公司,从公司创建的弱实体到传感器和传感器,最后一个是我需要制作的列表)或者是否有其他方式相关联。

编辑:

以下是与所有表格相关的模型的印刷品:http://imgur.com/cWJQQEq

我将尝试再次解释我需要的内容:给定表TypeCompany中的'AreaService'参数,我需要列出表Sensor中的所有信息。但是,我不知道如何保存我需要的所有id。我已经读过关于连接但我不知道如何实际使用它们,也不知道它们是否解决了我的问题。对不起,如果这是一个愚蠢的问题。

1 个答案:

答案 0 :(得分:0)

考虑到您提供的所有详细信息,并将ERD中的弱实体视为附加表(因为我不知道在Oracle中实现此类对象的任何其他方式),此查询应该为您提供所需的信息 -

SELECT *
FROM sensor s INNER JOIN Relation_11 r ON s.ID_sensor = r.sensor_ID_sensor
INNER JOIN Company c ON r.Empresa_IDEmpresa = c.IDempresa
WHERE c.IDempresa in (SELECT IDempresa
                      FROM Company c INNER JOIN TypeCompany tc ON c.TipoEmpresa_IDE = tc.IDE
                      WHERE tc.AreaService = <AreaServiceVar>)