【问题标题】:Need help coming up with a query or an alternate solution需要帮助提出查询或替代解决方案
【发布时间】:2014-01-08 23:12:10
【问题描述】:

我在db1 上有一个table1。我在 'db2. Thetable2` 上有另一个表 table2 正在通过 dblink 在 plsql 过程中使用。

我使用游标从table1 获取所有主键,这样我的变量ar_col 就是table1 的PK 列表。

现在我想从table2 中获取这些值的所有值。万一我在table2 中没有值,我的结果中至少应该有来自table1 的pk。

我使用了以下查询,但它返回空白

SELECT t1.col1, t2.col1, t2.col2, t2.col3, 
  FROM table1 t1
  LEFT OUTER JOIN table2@db_link t2
  ON t2.col1 = t1.col1
  WHERE t2.col1 IN (ar_col);

我想在 for 循环中使用结果,因此我将在此查询中使用批量收集。 ar_col 是包含 table1 的所有 pks 的数组

附注: ar_column的定义是

TYPE t_column IS TABLE OF TABLE_1.COLUMN_1%TYPE INDEX BY PLS_INTEGER;
ar_column t_column;

P.S2:ar_column 没有所有主键,仅根据某些条件选择。

【问题讨论】:

  • 如果ar_col 只是来自table1 的值的集合,那么在SQL 语句中同时使用集合和表的目的是什么?您发布的查询也不是有效的语法,但如果您得到 0 行的结果,这意味着您没有收到错误,这意味着您发布的查询与您正在运行的查询不同。
  • ar_col 是根据一些动态标准填充的,结果仍然是来自table1 的pk,但很少。所以总结一下,我首先必须从table1中找到特定的primary_keys。然后我必须从table2中找到那些pk的尊重记录。
  • 好的。所以你没有得到“所有的主键”,对吧?您的查询是否返回错误?因为,正如我所说,您发布的语法无效。但是您并不是说您遇到了语法错误。 ar_col的定义是什么?
  • 没有语法错误。我削减了我原来的查询,所以可能是一个错字。我首先尝试在 plsql 上运行它,结果为 0。

标签: sql oracle join left-join


【解决方案1】:

这样的?

select * 
  from (
         SELECT t1.col1, 
                t2.col1 t2col1, 
                t2.col2, 
                t2.col3, 
           FROM table1 t1, table2@db_link t2
          where t1.col1 = t2.col1 (+)
       )
 WHERE t2col1 in ( 
                   select thePrimaryKeyCol (what is the col name here)
                     from table1 
                 )

【讨论】:

  • 稍作修改后即可使用。我必须在where 之前添加临时表名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
相关资源
最近更新 更多