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

发布时间:2023-02-25 00:39:58 阅读:875次

https://www.begtut.com/mysql/mysql-intersect.html

在mysql中不支持关键字intersect,可以用 inner join 来代替intersect的作用。

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)

子查询返回第一个结果集。

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:在mysql中intersect如何取两张表的交集 出自老鄢博客 | 欢迎分享