sql INSERT条件作为select语句?

时间:2018-03-22 16:22:15

标签: sql database hadoop hive

我正在尝试使用HIVE sql填充表格。这两个表都有相同的列,但我只关心tableSource中尚未在tableDest中的行。

表中的行有一个索引字段recordId(不是主要的)。我想在tableSource中添加所有行,其中recordId GREATER大于tableDest中的最高recordId。

我有一个基本的命令结构,我想象的语法不正确吗?

INSERT INTO tableDest
SELECT * FROM tableSource
WHERE tableSource.recordId  >
 (SELECT MAX(recordId) FROM tableDest);

我只想将最后一个select语句中的值用于条件。

我尝试过使用变量没有成功:

SET highest_record =SELECT MAX(recordId) FROM tableDest;
INSERT INTO tableDest
SELECT * FROM tableSource
WHERE tableSource.recordId  > ${hiveconf:highest_record};

1 个答案:

答案 0 :(得分:3)

not exists是最佳选择。

INSERT INTO tableDest
SELECT * 
FROM tableSource s
WHERE NOT EXISTS (SELECT 1 
                  FROM tableDest d
                  WHERE s.recordId=d.recordId)