3

假设我有 2 个表 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
)
;

当 TABLE_B 中的 COUNT(*) = 0 时,将 'dummy_id','dummy_uid', current_date(), current_timestamp(), TO_OBJECT(PARSE_JSON('{}')), TO_ARRAY('DUMMY_ROWS') 插入 TABLE_A。

4

2 回答 2

3

怎么样

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

只有 UNION ALL 的一部分会包含一些东西。

顺便说一句,这个解决方案通常适用于任何 DBMS,而不仅仅是雪花。

于 2018-07-01T13:55:45.393 回答
-1

您可以使用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;

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

于 2018-06-29T18:06:22.250 回答