【问题标题】:Postgres: Problem INSERTING records if they does not exist already in a tablePostgres:如果表中不存在记录,则插入记录问题
【发布时间】:2021-02-03 00:52:01
【问题描述】:

我有两张桌子:

时态表:planning.env_seleccion_envase seleccionado_temp(每天更新一次,目前有500条记录)

生产表:planning.env_seleccion_envase_seleccionado(合并全年数据,目前有0条记录)

为了将临时表中的新记录插入到生产表中,我进行了查询,这是我的尝试:

INSERT INTO planning.env_seleccion_envase_seleccionado(centro, sku, texto_breve_material, movimiento, almacen, cantidad, unidad_medida_base, fecha_contabilizacion, fecha_entrada, sag, uen, drv, cupo, tipo_envase, cupo_agrupado, color_envase, cantidad_abs, fecha_carga) 
    SELECT DISTINCT centro, sku, texto_breve_material, movimiento, almacen, cantidad, unidad_medida_base, fecha_contabilizacion, fecha_entrada, sag, uen, drv, cupo, tipo_envase, cupo_agrupado, color_envase, cantidad_abs, fecha_carga
    FROM planning.env_seleccion_envase_seleccionado
    WHERE NOT EXISTS (
        SELECT 'X' 
        FROM planning.env_seleccion_envase_seleccionado_temp
        WHERE 
            planning.env_seleccion_envase_seleccionado_temp.fecha_carga = 
            planning.env_seleccion_envase_seleccionado.fecha_carga
    );

我只使用字段 FECHA_CARGA 作为比较,因为这个字段有记录插入的日期,我也尝试使用“Where ”部分的查询,但它也不起作用。

在这两种情况下,我都会得到 ** INSERT 0 0 ** 的结果,但它什么都不插入

你们能帮帮我吗?有任何想法吗?对不起,如果解决方案很简单,但我有点新

【问题讨论】:

  • 我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。

标签: sql database subquery


【解决方案1】:

您是从产品表插入,它应该来自临时表并检查临时表:

INSERT INTO planning.env_seleccion_envase_seleccionado(centro, sku, texto_breve_material, movimiento, almacen, cantidad, unidad_medida_base, fecha_contabilizacion, fecha_entrada, sag, uen, drv, cupo, tipo_envase, cupo_agrupado, color_envase, cantidad_abs, fecha_carga) 
SELECT DISTINCT centro, sku, texto_breve_material, movimiento, almacen, cantidad, unidad_medida_base, fecha_contabilizacion, fecha_entrada, sag, uen, drv, cupo, tipo_envase, cupo_agrupado, color_envase, cantidad_abs, fecha_carga
FROM    
    planning.env_seleccion_envase_seleccionado_temp  --<-- here
WHERE
    NOT EXISTS (
        SELECT
            'X'
        FROM
            planning.env_seleccion_envase_seleccionado --<-- here
        WHERE
            planning.env_seleccion_envase_seleccionado_temp.fecha_carga = planning.env_seleccion_envase_seleccionado.fecha_carga
    );

【讨论】:

    【解决方案2】:

    例子:

    insert into
      usuario(id, email)
    select
      nextval('seq_usuario'),
      'email@gmail.com'
    where
      NOT EXISTS (
        select
          id,
          email
        from
          usuario
        where
          email like 'email@gmail.com'
      );
    

    【讨论】:

      猜你喜欢
      • 2014-04-04
      • 2014-03-08
      • 1970-01-01
      • 2021-09-03
      • 2018-12-26
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多