在mysql中intersect如何取两张表的交集

`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)
```
子查询返回第一个结果集。

    A+
发布日期:2023年02月25日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: