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

标签 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 的名称。这是可以做到的吗?谢谢。

--编辑-- 为了澄清,我必须返回 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

现在你只会得到 column1column3name 返回


此外,您可能会发现在 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

RecordIDPersonID 的来源进行了一些猜测,但这是一般的想法。

关于postgresql - 如何避免在 PostgreSQL 返回语句中列出所有表列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33872338/

相关文章:

javascript - 如何为另一个按钮功能制作点击计数器?

c++ - 在 C++ 中返回二维数组对角线元素之和的函数

读取函数内的数据

c++ - QPSQL 驱动程序未加载 Qt

postgresql - Postgres 使用 generate_series 搜索缺失日期

javascript - 从功能外部控制 BX slider

Javascript 函数在 jquery 中不起作用

mysql - MySQL 和 PostgreSQL 通用的 MONTH() 和 YEAR() 函数的任何替代方法

php - 字段双引号 php postgresql

ruby-on-rails - 使用 Rails 和 Postgres 获取原子计数器(增量)的值