Oracle SQL: 尝试查询数据时出现重复行

Oracle SQL: Duplicate rows when trying to query data

Table答:

植物编号 植物名称 单位名称 技术类型
1 ABC 第 1 单元 SMR
1 ABC 第 2 单元 电解

Table乙:

植物编号 原料类型
1 天然气
1
select
a.PLANT_NAME,
a.UNIT_NAME,
b.FEEDSTOCK_TYPE,
a.TECHNOLOGY_TYPE

from
Table A a
inner join Table B b
on a.plant_ID = b.plant_ID

当我运行代码时,结果会是

植物名称 单位名称 技术类型 原料
ABC 第 1 单元 SMR 天然气
ABC 第 1 单元 SMR
ABC 第 2 单元 电解 天然气
ABC 第 2 单元 电解

但我希望结果是

植物名称 单位名称 技术类型 原料类型
ABC 第 1 单元 SMR 天然气
ABC 第 2 单元 电解

问题是我没有 link 每个原料的每个单元的通用主键。我在 2 个表之间只有一个共同的植物 ID。有什么想法吗?提前致谢! :)

你无法得到它,因为无法区分是使用“天然气”还是“水”,因为这两个值在 table_B 中共享相同的 PLANT_ID

可以使用聚合函数获取其中之一,例如MAX,但这只是一个 变通办法 ,无论如何 return 都不是您想要的。例如(第 1 - 9 行中的示例数据)(注意第 12 行中的 MAX 也需要 GROUP BY 子句):

SQL> with
  2  table_a (plantid, plant_name, unit_name, technology_type) as
  3    (select 1, 'ABC', 'Unit 1', 'SMR'          from dual union all
  4     select 1, 'ABC', 'Unit 2', 'Electrolysis' from dual
  5    ),
  6  table_b (plantid, feedstock_type) as
  7    (select 1, 'Natural Gas' from dual union all
  8     select 1, 'Water'       from dual
  9    )
 10  select a.plant_name,
 11         a.unit_name,
 12         max(b.feedstock_type) feedstock_type,
 13         a.technology_type
 14  from table_a a join table_b b on a.plantid = b.plantid
 15  group by a.plant_name, a.unit_name, a.technology_type;

PLA UNIT_NAME  FEEDSTOCK_TYPE  TECHNOLOGY_TYPE
--- ---------- --------------- ---------------
ABC Unit 2     Water           Electrolysis
ABC Unit 1     Water           SMR

SQL>

plant_id 外,您没有任何内容可 join。如果要“对齐”行,可以使用 row_number():

引入一个新列
select a.PLANT_NAME, a.UNIT_NAME, b.FEEDSTOCK_TYPE, a.TECHNOLOGY_TYPE
from (select a.*,
             row_number() over (partition by plant_id order by unit_name) as seqnum
      from table_A a
     ) a join
     (select b.*,
             row_number() over (partition by plant_id order by feedstock_type) as seqnum
      from table_B b
     ) b
     on a.plant_ID = b.plant_ID and a.seqnum = b.seqnum;

table 中没有隐式值,列中只有显式值。您似乎想要将 table A 的“第 1 行”连接到 table B 的“第 1 行”,依此类推。在这种情况下,您需要在每个 table 的列中有一个显式值 1、2、... 并加入该值。