sql - Postgres 函数返回集

标签 sql function postgresql view return

有人可以告诉我解决这个问题的正确方法吗?我不确定在这种情况下我应该使用函数还是 View 。

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

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';

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

我尝试过的一种方法是创建一个捕获连接的 View ,但我如何才能同时在多个账户中使用它来处理不准确的帐号?

另一种可能性是使用一个函数来遍历临时表并从查询中捕获信息。在这方面,我的问题是:如何建立一个结果集或表从函数返回?我是否必须创建一个临时表作为函数的一部分并在循环执行时将记录插入其中?有没有比使用 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

如有任何帮助,我们将不胜感激。

最佳答案

您是否尝试过在 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;

关于sql - Postgres 函数返回集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846912/

相关文章:

特定类别/值对的 SQL 算法

javascript - 如何在javascript中选择多个复选框验证

Python递归函数似乎丢失了一些变量值

node.js - 美元符号 ('$' ) 在 .query 的字符串中是什么意思?

当我使 WHERE 子句更具限制性时,PostgreSQL 查询需要 100 倍的时间,这违反直觉

mysql - 事实表上的按日期 SQL 查询分组

sql - 欧洲网站的最佳字符集和排序规则

sql - 来自外部驱动器的非常慢的简单 SQLite 查询

python - 根据另一个函数调用自动从一个函数返回

c - PostgreSQL:文本到 JSONB - 总大小超过最大值