在postgresql中返回表时如何省略记录?

sqserrrh  于 2023-02-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(107)

我遇到了一个问题,当我试图执行一个函数时,它是否返回记录取决于另一个函数的结果。我想做的是,当函数(本例中的“function_typecar”)返回1作为结果,它返回记录,否则为否。问题是当条件不满足时。它会重复相同的记录,直到有一个记录再次满足条件。当条件不满足时,有没有办法跳过返回记录?我留下了一个这种情况的例子

CREATE OR REPLACE FUNCTION schema.function_test
  RETURNS TABLE(id_r INTEGER, name_r CHARACTER VARYING, year_r INTEGER) AS
$BODY$
  
DECLARE 
    sql_record RECORD;
    type_car INTEGER;
BEGIN  
    SELECT id, name, year
    FROM car

    FOR sql_record IN
        SELECT id, name, year
        FROM car
    LOOP
        SELECT type INTO type_car FROM function_typecar(sql_record.id);

        IF type_car = 1 THEN
            id_r := sql_record.id;
            name_r := sql_record.name;
            year_r := sql_record.year;          

        END IF;

        RETURN NEXT;

    END LOOP;
END; $BODY$

这是我想要避免的结果,它只会给我带来满足IF条件的结果:

vxf3dgd4

vxf3dgd41#

类似这样的代码应该可以工作,不需要LOOP,使用普通SQL:

CREATE OR REPLACE FUNCTION function_test()
  RETURNS TABLE(id_r INTEGER, name_r CHARACTER VARYING, year_r INTEGER)
LANGUAGE SQL 
    AS
$BODY$
    SELECT  id, name, year
    FROM car
            JOIN function_typecar(id) ON type = 1;
$BODY$;

相关问题