代码之家  ›  专栏  ›  技术社区  ›  dks551

雪花状条件插入表

  •  2
  • dks551  · 技术社区  · 6 年前

    假设我有两个表table_a和table_b。当table_b中没有行时,我想在table_a中插入一个虚拟行,如果table_b中有行,我想在table_a中插入任何现有的行。我们如何做到这一点?

    CREATE TABLE TABLE_A(
        id          STRING      NOT NULL
      , uid         STRING      NOT NULL
      , date        STRING      NOT NULL
      , timestamp   TIMESTAMP   NOT NULL
      , payload     OBJECT      NOT NULL
      , arr         ARRAY       NOT NULL
    )
    ;
    
    CREATE TABLE TABLE_B(
        id          STRING      NOT NULL
      , uid         STRING      NOT NULL
      , date        STRING      NOT NULL
      , timestamp   TIMESTAMP   NOT NULL
      , payload     OBJECT      NOT NULL
      , arr         ARRAY       NOT NULL
    )
    ;
    

    当COUNT(*)=0在表B中时 插入'dummy_id','dummy_uid',current_date(),current_timestamp(),到对象(parse_json('{}'),到数组('dummy_rows') 在桌子上。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Marcin Zukowski    6 年前

    怎么样

    INSERT INTO TABLE_A
      SELECT * FROM TABLE_B
    UNION ALL
      SELECT 
        'dummy_id','dummy_uid', current_date(), current_timestamp(),
        TO_OBJECT(PARSE_JSON('{}')), TO_ARRAY('DUMMY_ROWS') 
      WHERE (SELECT COUNT(*) FROM TABLE_B) = 0
    

    只有联合的一部分会包含一些东西。

    顺便说一句,这个解决方案一般应该适用于任何dbms,而不仅仅是snowflake。

        2
  •  0
  •   Ashwani Tiwari    6 年前

    你可以使用 sql的case函数 ,你可以写这样的东西

    INSERT into table_A(),
    CASE
    WHEN (select count(*) from table_b ) > 0 
    THEN select * from table_b
    ELSE "some dummy data"
    END
    FROM table_b;
    

    这不是复制粘贴答案,但从这里你可以找到你的路径