首页 > 解决方案 > 一次查询多视图数据

问题描述

我有一个使用 Oracle 数据库中的列表框条目的应用程序。加载应用程序时,使用 5 到 10 个与数据库的连接来获取所有列表框值,并且在开始时有点慢。

我想出了一个想法,即在一个查询中获取所有数据,然后将每一列添加到正确的列表框中。但是我不确定这是否可能,如果是的话,如何做到这一点。我试图在谷歌和 SO 上找到解决方案,但没有找到匹配项。

来自不同表的数据没有任何关系——它只是稍后需要的单词或 ID 列表。

典型的 SQL 查询尝试加入数据,这不是我正在寻找的结果,下面的示例代码。

  SELECT
  desk.id_number as desk_id,
  desk.name as desk_name,
  sub.id as subpurpose_id,
  sub.sub_purpose as subpurpose_name

  FROM
  desk_table desk,
  sub_table sub

...这是我想要实现的数据。

+---------+-----------+----------------+----------- ------+
| 桌号 | 桌名 | 子目的_id | 子目的名称 |
+---------+-----------+----------------+----------- ------+
| 1 | 办公桌1 | 11 | 子11 |
| 2 | 办公桌2 | 12 | 子12 |
| 3 | 办公桌3 | 13 | 子13 |
+---------+-----------+----------------+----------- ------+

标签: sqloracle

解决方案


所以你可以这样做,虽然我认为它很乱,我不会推荐它。

SELECT
desk.id_number as desk_id,
desk.name as desk_name,
sub.id as subpurpose_id,
sub.sub_purpose as subpurpose_name
FROM
(select desk_table.*, rownum rn from desk_table) desk
FULL OUTER JOIN (select sub_table.*, rownum rn from sub_table) sub
ON desk.rn = sub.rn

问题是,由于您的表实际上根本不相关,您自然会想要做 a cross join,但这会给您两个表的结果的每个组合 - 所以您想过滤它以匹配table1中的第 1 行来自 table2的第 1 行等。

编辑:当每个表中有不同数量的行时,我将其更新为可以工作-为此,您需要完整的外部联接。

在您的场景中,我建议使用带有添加列的 UNION,该列仅描述每行所属的列表框。它更容易阅读和维护。

SELECT 'DESK' as listbox, id_number as id, name
FROM desk_table
UNION ALL
SELECT 'SUBPURPOSE', id as id, sub_purpose as name
FROM sub_table

推荐阅读