使用列中的值来运行SELECT语句Oracle

时间:2013-10-02 15:50:52

标签: sql oracle

我需要在查询中迭代列值。

Table1
index value

1, Nice
2, School
3, Day

Table2
index parent money

1, John, 100
2, Mary, 200
3, Mark, 300

伪代码:

  FOR all values in Table1 
  SELECT  parent, function(value) 
  from Table2

主要问题在于这个函数,我一次只能插入一个值。

1 个答案:

答案 0 :(得分:3)

这就是你的伪代码所要求的:

SELECT
  Table2.parent,
  MyFunction(Table1.value) AS function_value
FROM Table2
CROSS JOIN Table1

根据您的示例数据,此查询的结果将是:

PARENT FUNCTION_VALUE
------ ---------------------------
John   value of function('Nice')
Mary   value of function('Nice')
Mark   value of function('Nice')
John   value of function('School')
Mary   value of function('School')
Mark   value of function('School')
John   value of function('Day')
Mary   value of function('Day')
Mark   value of function('Day')

这是因为查询调用了 Table1 Table2中每一行的中的每一行的函数。如果Table1中有8行,Table2中有10行,则会获得80个结果(8 x 10)。如果每个表中有1,000行,您将获得100万个结果(1,000 x 1,000)。

如果每个表中的Index列用于关联行,请尝试改为:

SELECT
  Table2.parent,
  MyFunction(Table1.value) AS function_value
FROM Table2
JOIN Table1 ON Table2.index = Table1.index

使用您的示例数据,此查询的输出将为:

PARENT FUNCTION_VALUE
------ ---------------------------
John   value of function('Nice')
Mary   value of function('School')
Mark   value of function('Day')

如果这些查询都不符合您的要求,请提供样本结果。