我在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。我已经读过关于连接但我不知道如何实际使用它们,也不知道它们是否解决了我的问题。对不起,如果这是一个愚蠢的问题。
答案 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>)