1

有人可以让我知道解决这个问题的正确方法吗?我不确定在这种情况下是否应该使用函数或视图。

我有一个临时表,其中包含一些我需要在类似于此的查询中搜索的帐号:

SELECT
    tb1.accountNo,
    tb2.name
FROM
    joinTable jt
    JOIN table1 tb1 ON jt.foreign-key1 = tb1.id
    JOIN table2 tb2 ON jt.foreign-key2 = tb2.id
WHERE tb1.accountNo LIKE '%sub-string';

我在临时表中的帐号不完全匹配,但我需要从另一个表中提取信息。上面的查询在每个帐户的基础上工作,但我想要一些可以批量工作的东西。

我尝试过的一种方法是创建一个捕获连接的视图,但是我如何一次将它与多个帐户的不准确帐号一起使用?

另一种可能性是使用函数循环遍历临时表并从查询中捕获信息。在这方面,我的问题是:如何建立一个结果集或表以从函数返回?我是否必须创建一个临时表作为函数的一部分并在循环执行时将记录插入其中?有没有比使用 TYPE 更优雅的方法?这是我一直在尝试的示例函数。

CREATE TYPE accName AS (accountNo VARCHAR(255), name VARCHAR(200));
CREATE OR REPLACE FUNCTION findMissingAccounts()
    RETURNS SETOF accName AS
    $$
    DECLARE
        tempacc RECORD;
    BEGIN
        FOR tempacc IN SELECT * from tempTable LOOP --non-complete account number
            RETURN QUERY -- RETURN QUERY or RETURN NEXT?
                SELECT
                    tb1.accountNo,
                    tb2.name
                FROM
                    joinTable jt
                    JOIN table1 tb1 ON jt.foreign-key1 = tb1.id
                    JOIN table2 tb2 ON jt.foreign-key2 = tb2.id
                WHERE tb1.accountNo LIKE '%tempacc';
         END LOOP;
    RETURN;
    END;
    $$ LANGUAGE 'plpgsql' STABLE

任何帮助将不胜感激。

4

1 回答 1

0

您是否尝试过按LIKE条件加入表格?

SELECT
    tb1.accountNo,
    tb2.name,
    tt.tempacc
FROM
    joinTable jt
    JOIN table1 tb1 ON jt.foreign-key1 = tb2.id
    JOIN table2 tb2 ON jt.foreign-key2 = tb1.id
    JOIN tempTable tt ON jt.accountNo LIKE '%'||tt.tempacc;
于 2013-11-07T21:43:30.947 回答