`https://www.begtut.com/mysql/mysql-intersect.html`
在mysql中不支持关键字intersect,可以用 inner join 来代替intersect的作用。
![](http://www.begtut.com/wp-content/uploads/2019/08/MySQL-INTERSECT.png)
MySQL INTERSECT
与UNION运算符不同,运算INTERSECT符返回两个圆之间的交集。
需要注意的是SQL标准有三个集操作符,其中包括 UNION,INTERSECT,和MINUS。
下面的语句创建 表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;
运行结果:
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.04 sec)
以下查询返回表中的行t2:
SELECT id
FROM t2;
运行结果:
+----+
| id |
+----+
| 2 |
| 3 |
| 4 |
+----+
3 rows in set (0.01 sec)
使用DISTINCT运算符和INNER JOIN子句模拟MySQL INTERSECT运算符。
以下语句使用DISTINCT和INNER JOIN子句返回两个表中的不同行:
SELECT DISTINCT
id
FROM t1
INNER JOIN t2 USING(id);
运行结果:
+----+
| id |
+----+
| 2 |
| 3 |
+----+
2 rows in set, 3 warnings (0.00 sec)
这个怎么运作。
INNER JOIN子句从左表和右表返回行。
DISTINCT操作将删除重复的行。
使用IN运算符和子查询模拟MySQL INTERSECT运算符
以下语句使用IN运算符和子查询返回两个结果集的交集。
SELECT DISTINCT
id
FROM
t1
WHERE
id IN (SELECT
id
FROM
t2);
运行结果:
+----+
| id |
+----+
| 2 |
| 3 |
+----+
2 rows in set, 3 warnings (0.00 sec)
```
子查询返回第一个结果集。