编写sql语句中,经常需要编写获取一张数据表中不存在与另一张表的数据,相关编写方法如下:方法1: 使用not in ,效率低下,在数据较小的情况下可以采用如下编写 SELECT * FROM a WHERE 1=1AND a.Id NOT IN( SELECT Id FROM B WHERE B.IsDeleted=0 GROUP BY B.Id);方法2:使用left...
select propsdef.*, playerbag.COUNT from playerbag
left
join
propsdef on playerbag.propsid == propsdef.ID and propsdef.maintype = 2;
出现了很多的null
数据
,于是修改如下。
解决方法:
select propsdef.*, playerbag.COUNT from pl
mysql
数据
库
中
一张
表
与另
一张
表
有相同的一个字段,需要过滤出
表
t_camera
中
在 t_sys_role_camera
表
中
不存在
的
数据
,利用关键字 NOT EXISTS来实现。
同理可以使用EXISTS 关键字来查询
一张
表
在另
一张
表
中
存在的
数据
。
SELECT
t_camera t
WHERE
NOT EXISTS (
SELECT
t_sys_role_camer
编写sql语句
中
,经常需要编写
获取
一张
数据
表
中
不存在
与另
一张
表
的
数据
,相关编写方法如下:
方法1: 使用not in ,效率低下,在
数据
较小的情况下可以采用如下编写
SELECT
FROM a
WHERE 1=1
AND a.Id NOT IN(
SELECT
--
表
1: 姓名
create table app.test_boa_1 (id string ,name string );
insert into app.test_boa_1 values (1,'安妮');
insert into app.test_boa_1 values (2,'盖伦');
insert into app.test_boa_1 values (3,'光辉');
--
表
2:工资
create table app.test_boa_2 (id string ,sal
left
join
详解
1.不考虑where条件下,
left
join
会把左
表
所有
数据
查询出来,on及其后面的条件仅仅会影响右
表
的
数据
(符合就显示,不符合全部为null)
2.在匹配阶段,where子句的条件都不会被使用,仅在匹配阶段完成以后,where子句条件才会被使用,它将从匹配阶段产生的
数据
中
检索过滤
3.所以左连接关注的是左边的主
表
数据
,不应该把on后面的从
表
中
的条件加到where后,这样会影响原有主
表
中
的
数据
4.where后面:是先连接然生成临时查询结果,然后再筛选
on后面:先根据条件过滤筛
如图一为主
表
应检索到的五条
数据
,fwnr字段三个为null的,一旦用
left
join
或inner
join
关联fwnr,这三条为null的
数据
会检索不到
图一,关联语句为
//正确示例
LEFT
JOIN
workflow_SelectItem f ON ISNULL(a.fwnr,0) = f.selectvalue
图二为未检索到
//错误示例
LEFT
JOIN
workflow_SelectItem f ON a.fwnr = f.se
发现上面的查询语句
中
我使用
left
和inner的效果居然是一样的?
在多
表
连接查询时,SQL语句执行到where之前会先形成一个临时
表
,而on就是临时
表
中
的条件筛选,使用
left
join
则不管条件是否为真,都会查询出左边
表
的
数据
,条件为假的,则显示为null。而where条件是属于临时
表
生成之后的过滤条件!
如果我们是进行多
表
连接查询并且需要其它的条件语句时(where之类),当这个条件是作用于右
表
(也就是
left
join
后面跟的那