mysql 选择在一个table不在另一个table的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 选择在一个table不在另一个table的数据相关的知识,希望对你有一定的参考价值。

现在的问题是这样,
有一批id,在table1
另一批id,在table2
这些id的值会有交叉
我想选择两表的交集,及差集(存在于table1,但不存在于table2),怎么做?

差集select aa.id from aa where aa.id not in (select bb.id from bb);

交集select aa.id from aa where aa.id in (select bb.id from bb); 

是这种效果吗?

参考技术A intersect( 集合1,集合2)
except(集合1,集合2)

table1 放在 第一个...追问

intersect?

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

【中文标题】如果值不在另一个表中,则在一个表中插入该值【英文标题】: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

希望这会有所帮助:)

【讨论】:

以上是关于mysql 选择在一个table不在另一个table的数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL“不在”查询

Mysql 从一个表中选择全部,从另一个表中选择一些使用别名

mySQL 子查询/跨数据库连接?

使用 Django 选择不在另一个表中的值

从 table1 中选择不在 table2 中的列

SQL查询以查找ID不在另一个表中的记录