MySql中的minus用法

本文介绍了在MySQL中如何通过LEFT JOIN来模拟其他数据库如DB2和Oracle中的MINUS操作。以一个具体的例子展示了如何从表t_eg_01中找出不在t_eg_02中的数据,得到id为2的记录。通过LEFT JOIN查询,实现了数据的排除功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySql中的minus用法

在DB2和Oracle中,我们经常会用到minus这个函数,但是MySql中是没有minus的,那么要怎么办呢?

下面以一个小栗子来说下:

用例基础

表信息

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t_eg_01        |
| t_eg_02        |
+----------------+
2 rows in set (0.00 sec)

mysql> desc t_eg_01;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | varchar(5)   | NO   | PRI | NULL    |       |
| name   | varchar(20)  | YES  |     | NULL    |       |
| remark | varchar(255) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> desc t_eg_02;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | varchar(5)   | NO   | PRI | NULL    |       |
| name   | varchar(20)  | YES  |     | NULL    |       |
| remark | varchar(255) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

数据信息

mysql> select * from t_eg_01 \G
*************************** 1. row ***************************
    id: 1
  name: 张三
remark: 特长:音乐
*************************** 2. row ***************************
    id: 2
  name: 李四
remark: 爱好:游泳
*************************** 3. row ***************************
    id: 3
  name: 王五
remark: 富二代
3 rows in set (0.00 sec)

mysql> select * from t_eg_02 \G
*************************** 1. row ***************************
    id: 1
  name: 张三
remark: 特长:音乐
*************************** 2. row ***************************
    id: 3
  name: 王五
remark: 富二代
*************************** 3. row ***************************
    id: 5
  name: 光头
remark: 平民
3 rows in set (0.00 sec)

如果用minus会直接报错

mysql> select * from t_eg_01
    -> minus
    -> select * from t_eg_02;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from t_eg_02' at line 3

实现方式

通过left join实现minus的效果,如下图所示,应该得到id为2的数据

image-20211230234033578

mysql> select a.* from t_eg_01 a
    -> left join
    -> t_eg_02 b
    -> on a.id=b.id
    -> where b.id is null;
+----+--------+-----------------+
| id | name   | remark          |
+----+--------+-----------------+
| 2  | 李四    | 爱好:游泳       |
+----+--------+-----------------+
1 row in set (0.00 sec)

just so so ~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值