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

标签 mysql sql database oracle join

作为一项任务的一部分,我在 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/

相关文章:

sql-server - 在 Ubuntu 18.04 中安装 SQL Server 时出现 gpg : no valid OpenPGP data found.

mysql - 如何使用 WHERE 语句和 COUNT(*) = 1 选择行

mysql - 如何在 MySQL/SQL 中存储有关谁评价和推荐歌曲或项目的数据

java - 批处理没有运行,JDBC

php - MySQL select 在 phpMyAdmin 中工作,但我的 PHP 没有返回具有相同调用的行

sql - 数据库本地化

php - 如何将这段代码转为sql删除函数?

mysql - 查找在某个时间段内出现而在另一个时间段内没有出现的用户ID

sql - 虚拟文件系统在数据库中使用什么结构?

mysql - 如何仅将一个表的一行内容链接到另一个表的一列?