如果值不在另一个表中,则在一个表中插入该值
Posted
技术标签:
【中文标题】如果值不在另一个表中,则在一个表中插入该值【英文标题】:Insert a value in one table if it is not present in another 【发布时间】:2020-06-30 11:43:39 【问题描述】:我有两张桌子,Table1
和 Table2
。 Table1 只有一列,比如说Id
。 Table2
除了Id
之外还有多个其他列我需要编写一个配置单元查询来首先检查给定的Id
是否存在于Table1
的Id 列中。如果 ID 不存在,我需要将其插入 Table2
,否则插入 null
。
例如:
表1
----Id1------
"abcde"
"ghdis"
----------
现在我想我被赋予了一个值“sjsnx”。查询应该通过Table1
运行并在Table2
中插入"sjsnx"
。
如果给我"abcde"
作为值,查询应该在Table2
中插入null。
【问题讨论】:
请提供样本数据和期望的结果。 【参考方案1】:如果我理解正确,您可以使用not exists
获取table1
中的ID,而不是table2
:
insert into table2 (id, . . . )
select t1.id, . . .
from table1 t1
where not exists (select 1 from table2 t2 where t2.id = t1.id);
. . .
用于其他列及其值。
【讨论】:
如果表1中不存在值,将在表2的id列中插入什么? @AkshatChoudhary 。 . .我将“不存在”解释为“不存在于 table2 中”。否则,这个问题就没有意义了。【参考方案2】:你需要用某种编程语言编写代码(可能是 SHELL、Python 等)。这不能使用 hive 一次性完成,因为您的要求需要执行两个数据库 INSERTS。同样对于您的输入要求,您可以利用 Hive 配置参数使用 SET 值来搜索 ID。
您的代码在 SHELL 中将如下所示:
检查第一个表:
search_id='<your search id>'
table1search_var=`hive -S -e "select id from table1 where id=$hiveconfig:db_search_id" --hiveconfig:db_search_id=$search_id`;
if [ -z "$table1search_var" ];
then
echo "Found Null row. Hence inserting search id into table2"
hive -S -e "insert into table2(id) values('$search_id')"
else
echo "Found Not Null rows. Hence inserting NULL into table2"
hive -S -e "insert into table2(id) values(null)"
fi
希望这会有所帮助:)
【讨论】:
以上是关于如果值不在另一个表中,则在一个表中插入该值的主要内容,如果未能解决你的问题,请参考以下文章