如何使用 Oracle 减少对同一个表的多次连接?

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

如何在不使用 UNION 或对表 2 进行第二次选择的情况下,将多个连接减少到具有字段 ID、DESCRIPTION 的第二个表,并将结果显示在一行中?

我试过这样做,但我不想被查询超载。 有什么方法可以优化选择吗?

SELECT *
FROM TABLE_1 T1
LEFT JOIN TABLE_2 **INNER_1** ON T1.ID_1 = INNER_1.ID
LEFT JOIN TABLE_2 **INNER_2** ON T1.ID_2 = INNER_2.ID
LEFT JOIN TABLE_2 **INNER_3** ON T1.ID_3 = INNER_3.ID
...
oracle select left-join row inner-join
1个回答
0
投票

ID_1, ID_2, ID_3
等列的存在意味着您的表不是第一范式(1NF),这是数据建模/设计的第一个最基本的步骤。不应该有这样的重复组。正确的解决方法是将这些 ID 分解到它们自己的表中:

table_1                           table1_table2_xref    table_2
-------                           -----------           -------
{table_1_pk},                     {table_1_pk},         {id}
scalar attributes of table_1...   {id        }          table_2 attrs...

一旦解决了这个问题,你就可以简单地做:

SELECT *
  FROM table_1 t1
  LEFT JOIN table1_table2_xref x ON x.table_1_pk = t1.table_1_pk
  LEFT JOIN table_2 t2 ON x.id = t2.id

无论您拥有多少个 ID,这都会让您表现良好,极大地简化您的代码,并使您的设计具有弹性和可扩展性(您可以在不更改代码的情况下添加 ID)。

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