作为一项任务的一部分,我在 Oracle SQL Developer 上创建了一个数据库,但在执行查询时遇到了一些问题,我需要在其中列出为负责这些传感器的给定类型的公司安装的所有传感器。
我为此使用的表格如下:
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 关系绑定(bind)到传感器本身。
所以我的问题是我可以通过自然连接在两个表之间进行选择,但现在我卡住了,因为我不知道我是否必须使用局部变量来存储我获取的 ID(如果那样的话)有任何意义)关联我需要的 4 个表(公司类型、公司、从公司创建的弱实体到传感器和传感器,最后一个是我需要制作的列表)或者是否有其他方式。
编辑:
这是与所有表格相关的模型的打印:http://imgur.com/cWJQQEq
我将再次尝试解释我需要什么:给定 TypeCompany 表中的“AreaService”参数,我需要列出 Sensor 表中的所有信息。但是,我不知道如何保存到达那里所需的所有 ID。我读过有关连接的信息,但我不知道如何实际使用它们,也不知道它们是否能解决我的问题。对不起,如果这是一个愚蠢的问题。
最佳答案
在考虑了您提供的所有详细信息并将 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>)
关于mysql - SQL - 查询关联 3 个不同的表和一个弱实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36519175/