当前位置: 首页 > 知识库问答 >
问题:

尝试更新/插入时,表的子句条目中缺少

咸浩初
2023-03-14

尝试用一组新的值更新表,

如果值已经存在,那么它应该更新字段,如果不存在,那么它应该插入字段。

WITH f AS (
SELECT 1 as MarketId,  
                            'dros@test.com' as userName, 
                            28 as age, 
                            1 as isPremiumMember, 
                            1 as isSubscribed, 
                            '2021-03-12T17:07:30' as LastModifiedOn
    from members
    ) 


    
    INSERT INTO members
(age,isPremiumMember,isSubscribed, lastModifiedOn) 
    VALUES (f.age,f.isPremiumMember,f.isSubscribed,f.lastModifiedOn)
    ON CONFLICT (age,isPremiumMember,isSubscribed,lastModifiedOn)
DO UPDATE SET age= EXCLUDED.age,isPremiumMember = EXCLUDED.isPremiumMember,isSubscribed= EXCLUDED.isSubscribed,lastModifiedOn= EXCLUDED.lastModifiedOn;

但是,当我运行查询时,会出现以下错误:

missing FROM-clause entry for table "f"

试图用纯SQL编写这个

插入成员(年龄、isPremiumMember、isSubscribed、lastModifiedOn)从f中选择年龄、isPremiumMember、isSubscribed、lastModifiedOn(年龄、isPremiumMember、isSubscribed、lastModifiedOn)进行更新设置年龄=排除。年龄,ispremiummber=不包括在内。ispremiummber,isSubscribed=已排除。isSubscribed,lastModifiedOn=已排除。拉斯顿;

尝试将唯一约束添加为下面的“按建议选择”。这是我目前的声明。

共有2个答案

沈曜灿
2023-03-14

简化的示例,用于upsert查询(避免使用CTE):

\i tmp.sql

create table members (
        member_id integer primary key
        , name text
        , eyes text
        , hair text
        );

INSERT INTO members(member_id, name, eyes, hair) VALUES
 (1, 'Lisa', 'brown', 'brown'),
 (2, 'Bob', 'brown', 'brown');

\echo Initial
SELECT * FROM members order by 1;

INSERT INTO members(member_id,name, eyes, hair)
VALUES(1, 'Alice', 'blue', 'blonde' )
ON conflict (member_id) DO
UPDATE SET name = EXCLUDED.name, eyes = EXCLUDED.eyes, hair = EXCLUDED.hair
        ;

\echo After the update
SELECT * FROM members order by 1;

结果:

DROP SCHEMA
CREATE SCHEMA
SET
CREATE TABLE
INSERT 0 2
Initial
 member_id | name | eyes  | hair  
-----------+------+-------+-------
         1 | Lisa | brown | brown
         2 | Bob  | brown | brown
(2 rows)

INSERT 0 1
After the update
 member_id | name  | eyes  |  hair  
-----------+-------+-------+--------
         1 | Alice | blue  | blonde
         2 | Bob   | brown | brown
(2 rows)
宰父飞翼
2023-03-14

尝试使用select而不是f。

INSERT INTO members
(age,isPremiumMember,isSubscribed, lastModifiedOn) 
    select age,isPremiumMember,isSubscribed,lastModifiedOn from f
    ON CONFLICT (age,isPremiumMember,isSubscribed,lastModifiedOn)
DO UPDATE SET age= EXCLUDED.age,isPremiumMember = EXCLUDED.isPremiumMember,isSubscribed= EXCLUDED.isSubscribed,lastModifiedOn= EXCLUDED.lastModifiedOn;
 类似资料:
  • 问题内容: 我正在尝试通过以下查询使用视图和表格 错误是 问题答案: SELECT AcId, AcName, PldepPer, RepId, CustCatg, HardCode, BlockCust, CrPeriod, CrLimit, BillLimit, Mode, PNotes, gtab82.memno FROM VCustomer AS v1 INNER JOIN gtab82

  • 我有一个地址对象,它具有城市属性。创建要通过EF6插入的全新地址时,我会填写所有必需的基本地址属性(地址行1、邮政编码等),但我不需要完全水合的城市实例,只要它具有如下ID: 当我尝试插入我的地址时,它也会尝试对城市的属性进行验证,但我不想对城市进行任何CRUD,因为我只需要它的ID。 我发现了下面的问题,它引导我从DbContext中分离条目,这样EF就不会试图对所述对象执行CRUD: 如何阻止

  • 我有一个模型 视图定位对象: 然后它会做出一些改变(或者可能不会) 然后它尝试保存任何更改: 这里是Django尝试插入另一行而不是更新的地方,导致了一个DB错误 解决方案中有一种类似的问题: 一旦我将primary_key字段设置为自动字段,问题就消失了。 但是,我的主键已经是一个自动字段。 所以我用调试器逐步浏览了django代码,并在文件中资助了这个: 似乎如果没有更改(因此更新不做任何事情

  • 我有一个连续接收流插入的表(可能每秒数千个)。 我对使用更新功能(通过API调用)添加列感兴趣。我可以在数据仍在插入时调用Update将列添加到现有表中,而无需担心数据丢失吗? 作为参考,这是我计划用于向表中添加列的代码:

  • 这是我的ProdottoController: Prodotto实体: 这是视图(Freemarker): 当我尝试将值更新到表中时,出现以下错误: FreeMarker模板错误(调试模式;在生产中使用RETHROW!):以下内容已评估为null或缺失:==