有人可以让我知道解决这个问题的正确方法吗?我不确定在这种情况下我是应该使用函数还是视图。
我有一个临时表,其中包含我需要在类似的查询中搜索的一些帐号:
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
非常感谢任何帮助。
答案 0 :(得分: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;