Postgresql 在WITH子句中链接sql查询以最终执行更新

Postgresql 在WITH子句中链接sql查询以最终执行更新,postgresql,testing,common-table-expression,Postgresql,Testing,Common Table Expression,我试图用一组对象填充测试数据库,以进行一个非常特定的集成测试,但在使用其中一个查询返回的id作为后续对象字段的值时遇到了问题 -创建具有salesforce integration帐户的用户 以p为 在个人电子邮件中插入“已确认”、“名”、“姓”值 'test3@example.com'没错,'销售人员','盖伊' 返回id , ac AS 插入帐户订阅类型,订阅到期,salesforce集成值0,'2024-10-10',TRUE 返回id , 我是 插入帐户\成员人员\ id、帐户\ id、

我试图用一组对象填充测试数据库,以进行一个非常特定的集成测试,但在使用其中一个查询返回的id作为后续对象字段的值时遇到了问题

-创建具有salesforce integration帐户的用户 以p为 在个人电子邮件中插入“已确认”、“名”、“姓”值 'test3@example.com'没错,'销售人员','盖伊' 返回id , ac AS 插入帐户订阅类型,订阅到期,salesforce集成值0,'2024-10-10',TRUE 返回id , 我是 插入帐户\成员人员\ id、帐户\ id、管理员值 从p中选择p.id,从ac中选择ac.id,TRUE 返回帐户id,个人id , 洛杉矶 -创建salesforce链接的\u帐户 在链接的\u帐户中插入人员\u id、提供者\u id、访问\u令牌值 从p'salesforce',00DC00000016x37中选择p.id!AQIAQIt5EpCIgTFl9hg2qF9Ed6vzLJmTg9Nrd.uxvVva5WaxzMChn4sBBgV6KXiICCBoJgcFYbrTqpFtFJwpd.B7fe5kG9_z' 返回id , v AS -创建一个视频并拍摄 在视频中插入个人id、帐户id值 从p中选择p.id,从ac中选择ac.id 返回id , 塔斯 插入拍摄视频\u id、键、持续时间、状态、缩略图\u选定值 从v'g1/g1546ad07eff44c397e356be7c4bea49/g1546ad07eff44c397e356be7c4bea49',35,2,1中选择v.id 返回id -使用选定的拍摄更新视频 更新所选视频集\u take\u id=从拍摄地点选择id.video\u id=video.id; 我遇到的问题是,当测试运行时,它表明我创建的视频v没有设置选定的拍摄id,这意味着使用底部的选定拍摄查询更新视频实际上不起作用

重要的是要注意,当运行此脚本时,此数据库不是空的,在此之前运行了另外两个类似的种子文件,因此数据库中至少存储了2个视频、2个镜头等。如果有人知道如何在不必为外键提供静态id值的情况下实现这一点,那将为我节省大量时间


谢谢

看起来您希望更新主查询找到插入到同一SQL语句中的行,该行在语句开头不存在

如果是这种情况,则无法按照以下文件中的说明进行操作:

与中的子语句同时执行 和主查询。因此,在使用数据修改时 语句,指定的实际更新顺序 事情的发生是不可预测的。所有语句都以相同的方式执行 快照见第13章,因此他们无法看到彼此的效果 在目标表上。这减轻了压力的影响 行更新的实际顺序不可预测,这意味着 返回数据是在用户之间传递更改的唯一方法 与子语句和主查询不同


您可能希望使用a来代替pl/pgsql中以过程形式列出的多个查询。

您能提供相关的模式吗,也许是作为a?我想出来了,但感谢您花时间阅读!谢谢@Daniel-Vérité。这就是发生的情况,因为如果我在psql命令行中运行相同的查询两次,它会更新第一次调用的结果。。。我想我只需要在尝试运行更新之前完成insert查询。