菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
14
0

sql 查询 – left join on

原创
05/13 14:22
阅读数 5577
  1. 问题引入

 

主要是为了查询在一个表中出现,而不在另一个表中出现的数据,具体来说:

如下图所示, 有A、B两个表,其中B表的Aid字段参照A表的主键id,为了查询在A表中出现,却没有被B表引用的数据;

限定条件:A和B中is_deleted字段为‘n’  并且B中type为‘common’。

image

  2. 解决方法

 

2.1 left join on

使用not in可以方便实现,具体为:

select
    p.id, p.is_deleted, q.id
from 
    A as p left join B as q
on 
    q.is_deleted = 'n' and q.type = 'common'
where 
    p.is_deleted = 'n' and q.id is null

 

其中on主要是对B表进行限定,不会对A表进行限定,即使将p.is_deleted = 'n' 写在on之后也没有作用;

where是对形成的虚拟表进行再次限定,可以将对A表的查询条件设定在这里,具体结果如下:

绘图2

 

2.2 其他方法

当然还可以使用其他方法,比如not in 等,可以参考:

(1)  (数据库篇) SQL查询~ 存在一个表而不在另一个表中的数据

(2) http://wenku.baidu.com/link?url=-PcZNiGgonRT324jVS45HO-6yWx47MeAJiMnrFxgZ-Orsx4_jmBiT2LL1F1DYYjFGMcdd4hS6Q58SuhTDX6f6p0BOsUIL9M9omiwx1WHSZq

发表评论

0/200
14 点赞
0 评论
收藏