Sql 执行一个更新查询,该查询将条件设置为True if,条件设置为False if not
我需要编写一个存储过程,它将客户返回给我,由于他们在特定时间段内的购买行为,这些客户属于特定的细分市场 对于这些客户,segment字段将设置为true,如果他们的segment为true,则不来自给定查询的字段需要设置为false 我对程序本身有一个问题,关于返回类型,我想,有人能帮忙吗 在不使用时态表的情况下,是否可以将查询中没有出现的值设置为FALSESql 执行一个更新查询,该查询将条件设置为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$
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中处理更新中的左连接
变得有点复杂。