mysql minus替代方法_MySQL不支持INTERSECT和MINUS,及其替代方法

本文介绍了在MySQL中由于不支持INTERSECT和MINUS操作,如何使用INNER JOIN和子查询来实现相同的功能。对于INTERSECT,可以通过INNER JOIN并去除重复值来实现;对于MINUS,可以利用子查询或LEFT JOIN结合IS NULL条件来找出只存在于第一个表的数据。
摘要由CSDN通过智能技术生成

Doing an INTERSECT

An INTERSECT is simply an inner join where we compare the tuples

of one table with those of the other, and select those that appear

in both while weeding out duplicates. So

SELECT

member_id, name FROM a

INTERSECT

SELECT member_id, name FROM b

can simply be rewritten to

SELECT a.member_id,

a.name

FROM a INNER JOIN b

USING (member_id, name)

Performing a MINUS

To transform the statement

SELECT

member_id, name FROM a

MINUS

SELECT member_id, name FROM b

into something that MySQL can process, we can utilize subqueries

(available from MySQL 4.1 onward). The easy-to-understand

transformation is:

SELECT DISTINCT

member_id, name

FROM a

WHERE (member_id, name) NOT IN

(SELECT member_id, name FROM

table2);

Of course, to any long-time MySQL user, this is immediately

obvious as the classical

use-left-join-to-find-what-isn’t-in-the-other-table:

SELECT DISTINCT a.member_id, a.name

FROM a LEFT JOIN b USING (member_id, name)

WHERE b.member_id IS NULL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值