对每一行做一些事情然后得到结果联合 - SQL(DB2)

时间:2014-08-03 14:09:22

标签: sql db2

我找不到解决这个问题的方法。

我的表A有主键ROW_ID,表B有相同的extern键和列SOMETHING。 另外,我有这样的功能:

CREATE FUNCTION FIND_SOMETHING_FOR_ID(ROW_ID INTEGER)
RETURNS TABLE(SOMETHING INTEGER)
BEGIN ATOMIC
RETURN
    SELECT SOME_SCALAR_FUNCTION(SOMETHING)
    FROM B b
    WHERE b.ROW_ID=ROW_ID;
END@

我想要做的是:对于FIND_SOMETHING_FOR_ID返回的A get表中的每个ROW_ID 然后获取所有表的UNION。

1 个答案:

答案 0 :(得分:0)

根据documentation,你可以做你想做的事情:

select fsfi.*
from A a cross join
     table(find_something_for_id(a.row_id)) fsfi;

也就是说,表值函数可以在from子句中引用之前的表,但不能在它之后引用它们。 (注意:我将,中的from替换为cross join,因为我在from子句中厌恶逗号。)

顺便说一下,SQL Server使用cross apply运算符解决了这个问题。