SQL视图可联接3个表,但是有多个列可用于ON子句

问题描述 投票:0回答:2

我们在PostgreSQL中有一个数据库,可用于获取电池信息。

  1. 材料(化学原料)
  2. 由原材料制成的电极(阴极或阳极)
  3. 由电极和电解质(材料)制成的电池

每个表中都有一个唯一的“键”(第一列)以标识该项目。因此电极将指向材料。问题在于,同时存在“阴极”和“阳极”列的“电池”表,这些表引用了“电极”表(以及指向该材料的电极中的粘合剂,活性材料,溶剂,)。

我当前的视图看起来像这样。但我知道这是不正确的:

CREATE OR REPLACE VIEW se3d.m2elect2cell AS
SELECT 
    m."Key" as "Mat Key",
    m."Chemical",
    m."Description" as "Material Description",
    e."Description" as "Electrode Description",
    e."Role" as "Electrode Role",
    c."Key" as "Cell Key",
    c."Description" as "Cell Description"
FROM se3d.materials m
    INNER JOIN se3d.electrodes e ON (e."Active Material" = m."Key")
    INNER JOIN se3d.cells c ON (c."Cathode" = e."Key")

我们正在寻找的查询类型是查找具有特定材料属性的所有单元,或者从单元中查找其制造中使用的材料。

有关表的定义如下:

CREATE TABLE se3d.materials
(
    "Key" character varying COLLATE pg_catalog."default" NOT NULL,
    "Chemical" character varying(255) COLLATE pg_catalog."default",
    "Description" character varying(255) COLLATE pg_catalog."default",
    "Created" date,
    "Created By" character varying(255) COLLATE pg_catalog."default",
    "Modified" date,
    "Modified By" character varying(255) COLLATE pg_catalog."default",
    "Version" double precision,
    "Chemical Type" character varying(255) COLLATE pg_catalog."default",
    "Storage" character varying(255) COLLATE pg_catalog."default",
    "Tags" character varying(255) COLLATE pg_catalog."default",
    CONSTRAINT materials_pkey PRIMARY KEY ("Key")
)

CREATE TABLE se3d.electrodes
(
    "Key" character varying COLLATE pg_catalog."default" NOT NULL,
    "Active Material" character varying(255) COLLATE pg_catalog."default",
    "Active Material mass (g)" double precision,
    "Binder" character varying(255) COLLATE pg_catalog."default",
    "Binder mass (g)" double precision,
    "Conductive Additive" character varying(255) COLLATE pg_catalog."default",
    "Carbon mass (g)" double precision,
    "Created" date,
    "Created By" character varying(255) COLLATE pg_catalog."default",
    "Creator" character varying(255) COLLATE pg_catalog."default",
    "Description" character varying(255) COLLATE pg_catalog."default",
    "Modified" date,
    "Modified By" character varying(255) COLLATE pg_catalog."default",
    "Role" character varying(255) COLLATE pg_catalog."default",
    "Solvent" character varying(255) COLLATE pg_catalog."default",
    "Solvent mass (g)" double precision,
    "Version" double precision,
    "Creation Date" date,
    "Tags" character varying(255) COLLATE pg_catalog."default",
    CONSTRAINT electrodes_pkey PRIMARY KEY ("Key")
)
CREATE TABLE se3d.cells
(
    "Key" character varying COLLATE pg_catalog."default" NOT NULL,
    "Creator" character varying(255) COLLATE pg_catalog."default",
    "Creation Date" date,
    "Electrolyte" character varying(255) COLLATE pg_catalog."default",
    "Anode" character varying(255) COLLATE pg_catalog."default",
    "Cathode" character varying(255) COLLATE pg_catalog."default",
    "Separator" character varying(255) COLLATE pg_catalog."default",
    "Form Factor" character varying(255) COLLATE pg_catalog."default",
    "Test Plan" character varying(255) COLLATE pg_catalog."default",
    "Description" character varying(255) COLLATE pg_catalog."default",
    "Created" date,
    "Created By" character varying(255) COLLATE pg_catalog."default",
    "Modified" date,
    "Modified By" character varying(255) COLLATE pg_catalog."default",
    "Version" double precision,
    "Tags" character varying(255) COLLATE pg_catalog."default",
    CONSTRAINT cells_pkey PRIMARY KEY ("Key")
)
sql postgresql join sql-view
2个回答
0
投票

如果您扮演电极作为阳极和阴极...


0
投票

我们正在寻找的查询类型是查找具有特定材料属性的所有单元,或者从单元中查找其制造中使用的材料。

© www.soinside.com 2019 - 2024. All rights reserved.