Sql 执行一个更新查询,该查询将条件设置为True if,条件设置为False if not

Sql 执行一个更新查询,该查询将条件设置为True if,条件设置为False if not,sql,postgresql,Sql,Postgresql,我需要编写一个存储过程,它将客户返回给我,由于他们在特定时间段内的购买行为,这些客户属于特定的细分市场 对于这些客户,segment字段将设置为true,如果他们的segment为true,则不来自给定查询的字段需要设置为false 我对程序本身有一个问题,关于返回类型,我想,有人能帮忙吗 在不使用时态表的情况下,是否可以将查询中没有出现的值设置为FALSE CREATE OR REPLACE FUNCTION segment_men1() AS RETURNS void AS $BODY$

我需要编写一个存储过程,它将客户返回给我,由于他们在特定时间段内的购买行为,这些客户属于特定的细分市场

对于这些客户,segment字段将设置为true,如果他们的segment为true,则不来自给定查询的字段需要设置为false

我对程序本身有一个问题,关于返回类型,我想,有人能帮忙吗

在不使用时态表的情况下,是否可以将查询中没有出现的值设置为FALSE

CREATE OR REPLACE FUNCTION segment_men1() AS

RETURNS void AS
$BODY$
BEGIN
FOR r IN
SELECT AD.id FROM account AD
    INNER JOIN transactions TRA ON TRA.customerID = AD.id
        WHERE AD.gender = "male"
        AND TRA.transactionDate >= current_date - interval "365" days;

    LOOP
        UPDATE account
        SET Segment_Men = true
        WHERE NEXT r;

    END LOOP;
RETURN;

END
$BODY$
LANGUAGE 'plpgsql';

非常感谢您的帮助

为什么要为此使用循环?只需直接进行更新:

UPDATE account AD
    SET Segment_Men = true
    FROM transactions TRA 
    WHERE TRA.customerID = AD.id AND
          AD.gender = 'male' AND
          TRA.transactionDate >= current_date - interval '365' days;

然后一个否定的检查设置为False。谢谢!还有前面的评论。这要多得多convenient@user1694674 . . . 最简单的方法可能是在运行此更新之前将所有值设置为
false
。在Postgres中处理
更新中的
左连接
变得有点复杂。