【问题标题】:Postgres join between table and composite type表和复合类型之间的 Postgres 连接
【发布时间】:2021-11-10 13:28:21
【问题描述】:

有什么方法可以加入 Postgres 表和复合类型?

CREATE OR REPLACE FUNCTION public.function(
        typename Type)

        RETURNS table
        LANGUAGE 'sql'
    
        
    AS $BODY$ SELECT * 
        From public.table ta
        Inner JOIN 
            typename t
        ON 
            t.Id= ta.Id AND t.Name = ta.Name

它总是返回错误,我想这样做,因为我需要从 C# 项目发送 dataTable 并获取此 DataTable 中的所有项目

【问题讨论】:

  • 基本上你想从一个表中进行选择,其中表值与复合类型中的某些字段匹配。可能吗?是的。但它是否真的是你需要做的才能让它与你的 C# 构造一起工作,我不知道。顺便说一句,该函数完全无效,如果您想为此使用 postgres 函数,我将首先阅读有关如何创建 postgres 函数的文档。
  • RETURNS "function" 对我来说毫无意义。你到底想达到什么目的?如果要从函数返回结果,请使用 returns table (...)returns setof ...
  • 请注意,语言名称是一个标识符,不应用单引号括起来。此语法已弃用,未来版本将删除对它的支持
  • 我已经修复它只是我需要知道我是否可以在表和类型之间进行任何连接作为函数中的参数存在

标签: sql postgresql join inner-join


【解决方案1】:

提示:列名使用小写以避免使用双引号或使用“Id”或“Name”指定列名

Postgres Unnest 函数可用于将数组项或复合类型项转换为行。更多表格请参考https://www.postgresql.org/docs/9.2/functions-array.html

CREATE OR REPLACE FUNCTION public.function(
    typename Type)

    RETURNS table
    LANGUAGE 'sql'

    
AS $BODY$ SELECT * 
    From public.table ta
    Inner JOIN 
        unnest (typename) AS t(id,name)
    ON 
        t.id= ta.id AND t.name = ta.name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-02
    • 2020-10-04
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2019-07-02
    相关资源
    最近更新 更多