Skip to main content

MySQL负号

请注意,MySQL不支持减号运算符。本教程将向您展示如何使用join子句在MySQL中模拟减号运算符。

SQL减号运算符简介

减号运算符是SQL标准中包括并集、相交和减号的三个集合运算符之一。

减号比较两个查询的结果,并返回第一个查询的结果集中没有出现在第二个查询的结果集中的不同行。

下面说明了减号运算符的语法:

SELECT select_list1 
FROM table_name1
MINUS
SELECT select_list2
FROM table_name2;

使用减号运算符的查询的基本规则如下:

假设我们有两个表t1和t2,其结构和数据如下:

CREATE TABLE t1 (
id INT PRIMARY KEY
);

CREATE TABLE t2 (
id INT PRIMARY KEY
);

INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);

下面的查询从t1表的查询返回在t2表的查询结果中找不到的不同值。

SELECT id FROM t1
MINUS
SELECT id FROM t2;

MySQL MINUS Example

下面的维恩图说明了负操作:

MySQL MINUS Operator Illustration

请注意,某些数据库系统,例如Microsoft SQL Server和PostgreSQL,使用的是EXCEPT而不是减号。它们具有相同的功能。

MySQL减号运算符仿真

不幸的是,MySQL不支持减号运算符。但是,您可以使用join来模拟它。

要模拟两个查询的负数,请使用以下语法:

SELECT 
select_list
FROM
table1
LEFT JOIN table2
ON join_predicate
WHERE
table2.column_name IS NULL;

例如,以下查询使用LEFT JOIN子句返回与减号运算符相同的结果:

SELECT 
id
FROM
t1
LEFT JOIN
t2 USING (id)
WHERE
t2.id IS NULL;

在本教程中,您已经了解了SQL减号运算符,以及如何使用LEFT JOIN子句在MySQL中模拟减号运算符。