如果值不在另一个表中,则在一个表中插入该值

Posted

技术标签:

【中文标题】如果值不在另一个表中,则在一个表中插入该值【英文标题】:Insert a value in one table if it is not present in another 【发布时间】:2020-06-30 11:43:39 【问题描述】:

我有两张桌子,Table1Table2。 Table1 只有一列,比如说IdTable2 除了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

希望这会有所帮助:)

【讨论】:

以上是关于如果值不在另一个表中,则在一个表中插入该值的主要内容,如果未能解决你的问题,请参考以下文章

如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql

使用另一个表中的值进行大规模插入?

PL/SQL 触发器插入下一个值

如果 iPhone 应用程序中不存在,则在表中插入记录

在带有 oracle 光标的过程中使用用户定义的函数

根据另一个表中的值插入和/或更新记录