sql 自连接场景

前言

太菜了,太菜了。

场景

一张表tab有2个字段,

  • userId
    存储用户id,该字段表示发送消息的用户
  • receiveId
    存储用户id,该字段表示收到消息的用户

我们定义好友关系:互相发送过消息的用户就是好友。问题:找出是好友关系的用户对,也就是找出互相是好友关系的两个用户?

我想了半天,真是难搞,后面查了自连接才知道,原来表可以跟自己join。

select A.userId,A.receiveId
from tab A join tab B 
where A.userId = B.receiveId  and A. receiveId= B.userId

真是造孽呀,没想过这个问题,突然发现很多语句都可以跟自己来操作,突然有点意思了

主管及主管的员工

Table_一张表:

  • CEMP_ID 字段表示员工 ID
  • EMP_SUPV_ID 表示主管 ID

问题:查询出主管及主管的员工

SELECT A.EMP_ID AS EMP_ID,  B.EMP_ID AS EMP_SUPV_ID
FROM Table_C A, Table_C B
WHERE A.EMP_SUPV_ID = B.EMP_ID

突然有点神奇了

LEFT JOIN EXCLUDING INNER JOIN

返回左表有但右表没有关联数据的记录集。

SELECT A.PK AS A_PK, B.PK AS B_PK,
       A.Value AS A_Value, B.Value AS B_Value
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK
WHERE B.PK IS NULL;

主要是 where 条件,仔细看看,B.PK IS NULL。我们可以看到这样是找出不相等的数据。

参考博客

【mySQL】left join、right join和join的区别

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值