Skip to main content

如何模拟MySQL INTERSECT操作符

请注意,MySQL不支持INTERSECT操作符。本教程介绍如何使用join子句在MySQL中模拟INTERSECT运算符。

INTERSECT操作符简介

INTERSECT操作符是一个集合操作符,它只返回两个或多个查询的不同行。

下面说明了INTERSECT运算符的语法。

(SELECT column_list 
FROM table_1)
INTERSECT
(SELECT column_list
FROM table_2);

INTERSECT操作符比较两个查询的结果集,并返回两个查询输出的不同行。

要对两个查询使用INTERSECT运算符,请遵循以下规则:

下图说明了INTERSECT运算符。

MySQL INTERSECT

左查询生成一个结果集(1,2,3)。

右查询返回的结果集为(2,3,4)。

INTERSECT运算符返回两个结果集的不同行,其中包括(2,3)。

与UNION操作符不同,INTERSECT操作符返回两个圆之间的交点。

请注意,SQL标准有三个集合运算符,包括并集、交集和负数。

在MySQL中模拟INTERSECT

不幸的是,MySQL不支持INTERSECT操作符。但是,可以模拟INTERSECT操作符。

建立样本表

下面的语句创建表t1和t2,然后将数据插入这两个表中。

CREATE TABLE t1 (
id INT PRIMARY KEY
);

CREATE TABLE t2 LIKE t1;

INSERT INTO t1(id) VALUES(1),(2),(3);

INSERT INTO t2(id) VALUES(2),(3),(4);

下面的查询返回t1表中的行。

SELECT id FROM t1;

以下查询返回t2表中的行:

SELECT id
FROM t2;

1) 使用DISTINCT和INNER JOIN子句模拟INTERSECT

下面的语句使用DISTINCT运算符和内部JOIN子句返回两个表中的不同行:

SELECT DISTINCT 
id
FROM t1
INNER JOIN t2 USING(id);

工作原理。

2) 使用IN和subquery模拟INTERSECT

下面的语句使用IN运算符和子查询返回两个结果集的交集。

SELECT DISTINCT id
FROM t1
WHERE id IN (SELECT id FROM t2);

工作原理。

在本教程中,您学习了几种在MySQL中模拟INTERSECT操作符的方法。