我有一个与此类似的 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 的名称。这是可以做到的吗?谢谢。
--编辑-- 为了澄清,我必须返回 MyTable 中的所有列和 MySecondTable 中的 1 列。如果 MyTable 有 >15 列,我不想列出 RETURNS TABLE (col1.. coln) 中的所有列。
最佳答案
您只需在 SQL 语句的 SELECT
部分列出要返回的列:
SELECT t1.column1, t1.column2,
(SELECT Name FROM dbo.MySecondTable WHERE RecordID = PersonID)
FROM dbo.MyTable t1
WHERE PersonID = _ID
现在你只会得到 column1
、column3
和 name
返回
此外,您可能会发现在 SQL 语句的 FROM
部分使用 LEFT OUTER JOIN
比您现在拥有的相关子查询具有更好的性能:
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
和 PersonID
的来源进行了一些猜测,但这是一般的想法。
关于postgresql - 如何避免在 PostgreSQL 返回语句中列出所有表列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33872338/