update 后面带exists的作用是啥?不带的话,有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了update 后面带exists的作用是啥?不带的话,有啥区别?相关的知识,希望对你有一定的参考价值。

update t2 set t2.c3 = (select t1.id from t1 where t1.c1 = t2.c1 and t1.c2 = t2.c2)
where exists(select t1.id from t1 where t1.c1 = t2.c1 and t1.c2 = t2.c2);

不带exists时,则将所有的t2.c3更新成t1.id。带exists时,则判断t1.id是否为空,如果为空则在1的基础上将t2.c3更新为空。

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。EXISTS指定一个子查询,检测行的存在。

in和exists的区别

exists:存在。

exists()后面的子查询不返回列表的值,只是返回一个ture或false的结果,也就是它只在乎括号里的数据能不能查找出来,是否存在这样的记录。

其运行方式是先运行主查询一次再去子查询里查询与其对应的结果如果存在,返回ture则输出,反之返回false则不输出,再根据主查询中的每一行去子查询里去查询。

in:包含。

in()后面的子查询是返回结果集的,换句话说执行次序和exists()不一样。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出。

参考技术A update 后面带exists:
只更新符合条件的值。

不带Exists:
更新所有的t2.c3。
(select t1.id from t1 where t1.c1 = t2.c1 and t1.c2 = t2.c2) 不存在的话,将更新为空值。本回答被提问者和网友采纳
参考技术B 带exists:只更新符合exists内子查询条件的数据,
不带exists:更新所有t2表中的数据,当子查询有值时,更新为t1.id,当子查询无值时,更新为空;
参考技术C 1、不带exists时,则将所有的t2.c3更新成t1.id;
注:t1需满足 t1.c1 = t2.c1 and t1.c2 = t2.c2
2、带exists时,则判断t1.id是否为空,如果为空则在1的基础上将t2.c3更新为空;
注:exists(select t1.id from t1 where t1.c1 = t2.c1 and t1.c2 = t2.c2);此句exists是判断t1.id 是否为空

linux程序名称带devel跟不带的区别

最近使用二进制包安装杀毒软件ClamAV,在执行./configure的时候,报错缺少了一些依赖包,然后直接执行yum install进行安装,结果安装完毕之后,再次编译依然报错:

报错没有libxml2

然后我执行yum命令进行安装

yum install -y libxml2

结果再次编译还是报同样的错误,估计是安装的包不对或者不够,于是直接执行查找命令

yum search all libxml2

发现了还有一个libxml2-devel的包,于是直接安装一下,结果编译就通过了,查看了一下两个包的注释,也网上查了一下,简单点来说,两个包提供的累是一样的,但是用途不同。如果是要安装或者运行使用到libxml2的类的程序,那么安装不带devel的安装包,如果是用来开发编程使用到libxml2的类的程序,那么就用带devel的安装包,有点类似于jdk跟jre的关系。

devel 包主要是供开发用,至少包括以下2个东西:

1. 头文件

2. 链接库

有的还含有开发文档或演示代码。

 

最近使用二进制包安装杀毒软件ClamAV,在执行./configure的时候,报错缺少了一些依赖包,然后直接执行yum install进行安装,结果安装完毕之后,再次编译依然报错:

报错没有libxml2

 

然后我执行yum命令进行安装

yum install -y libxml2

结果再次编译还是报同样的错误,估计是安装的包不对或者不够,于是直接执行查找命令

yum search all libxml2

 

发现了还有一个libxml2-devel的包,于是直接安装一下,结果编译就通过了,查看了一下两个包的注释,也网上查了一下,简单点来说,两个包提供的累是一样的,但是用途不同。如果是要安装或者运行使用到libxml2的类的程序,那么安装不带devel的安装包,如果是用来开发编程使用到libxml2的类的程序,那么就用带devel的安装包,有点类似于jdk跟jre的关系。

devel 包主要是供开发用,至少包括以下2个东西:

1. 头文件

2. 链接库

有的还含有开发文档或演示代码。

 

以上是关于update 后面带exists的作用是啥?不带的话,有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

js 声明变量带var和不带的区别

linux程序名称带devel跟不带的区别

linux程序名称带devel跟不带的区别

List集合中subList方法带的2个参数是啥意思

c语言的主要作用是啥

format后面带的参数有那些