如何避免在PostgreSQL返回语句中列出所有表列?

时间:2015-11-23 13:30:58

标签: postgresql function

我有一个类似于这个的PostgreSQL函数:

CREATE OR REPLACE FUNCTION dbo.MyTestFunction(
    _ID INT
)
RETURNS dbo.MyTable AS
$$
    SELECT  *,
            (SELECT Name FROM dbo.MySecondTable WHERE RecordID = PersonID)
    FROM dbo.MyTable
    WHERE PersonID = _ID
$$ LANGUAGE SQL STABLE;

我真的不想用以下内容替换RETURNS dbo.MyTable AS:

RETURNS TABLE(
    col1 INT,
    col2 TEXT,
    col3 BOOLEAN,
    col4 TEXT
) AS

并列出MyTable的所有列和MySecondTable的名称。这是可以做到的吗?感谢。

- EDIT-- 为了澄清我必须返回MyTable中的所有列和MySecondTable中的1列。如果MyTable有> 15列,我不想列出RETURNS TABLE(col1 .. coln)中的所有列。

1 个答案:

答案 0 :(得分:0)

您只需列出要在SQL语句的addAction($object)部分中返回的列:

SELECT

现在您只需SELECT t1.column1, t1.column2, (SELECT Name FROM dbo.MySecondTable WHERE RecordID = PersonID) FROM dbo.MyTable t1 WHERE PersonID = _ID column1,然后column3返回

此外,您可能会在SQL语句的name部分使用LEFT OUTER JOIN找到更好的性能,而不是现在使用的相关子查询:

FROM

SELECT t1.column1, t1.column2, t2.Name FROM dbo.MyTable t1 LEFT OUTER JOIN dbo.MySecondTable t2 ON t2.RecordID = t1.PersonID WHERE PersonID = _ID RecordID的来源进行了一些猜测,但这是一般的想法。