【问题标题】:SELECT INTO with more than one attributionSELECT INTO 具有多个归因
【发布时间】:2013-04-25 01:35:41
【问题描述】:

这条指令有效:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination)
FROM road 
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));

但我想以这种方式使用一些东西:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination), lengths array_agg(length)
FROM road
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));

如何只使用一条SELECT INTO指令来设置多个变量?

【问题讨论】:

    标签: sql postgresql variable-assignment plpgsql


    【解决方案1】:

    PL/pgSQL 中,您可以直接SELECT INTO 任意数量的变量。你只是把语法倒过来了:

    SELECT INTO unsolvedNodes, lengths 
           array_agg(DISTINCT idDestination), array_agg(length)
    FROM   road
    WHERE  idOrigin = ANY(solvedNodes)
    AND    NOT (idDestination = ANY(solvedNodes));
    

    您有关键字INTO 后跟一个目标变量列表,并且您有一个对应的SELECT 列表。 INTO 子句的目标可以是(引用the manual here):

    ...记录变量、行变量或逗号分隔的列表 简单的变量和记录/行字段。

    还有:

    INTO 子句几乎可以出现在 SQL 命令中的任何位置。 通常写在列表之前或之后 SELECT 命令中或命令末尾的 select_expressions 对于其他命令类型。建议您遵循此 以防 PL/pgSQL 解析器在未来版本中变得更严格。

    这是不要混淆SELECT INTO in the SQL dialect of Postgres - 不应再使用。它违背了标准 SQL,很可能最终会被删除。该手册强烈反对继续使用它:

    最好在新代码中为此目的使用CREATE TABLE AS

    【讨论】:

      【解决方案2】:

      是的,

      SELECT name,family INTO cName, cFamily FROM "CommonUsersModel";
      

      SELECT INTO cName, cFamily name,family  FROM "CommonUsersModel"
      

      【讨论】:

        猜你喜欢
        • 2019-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 2012-11-30
        • 2010-11-23
        相关资源
        最近更新 更多