MySQL 中的 MINUS 是一个集合操作符,用于从第一个查询的结果中减去第二个查询的结果。类似于其他数据库中的 EXCEPTSET MINUS 操作MINUS 操作符返回第一个查询中存在但不在第二个查询中存在的所有行。

使用 MINUS 的基本语法如下:

SELECT column1, column2, ...
FROM table1
MINUS
SELECT column1, column2, ...
FROM table2;

这里,table1 中的所有行,如果 table2 中也有相同的行,那么这些行将不会出现在最终结果中。

示例:

假设有两个表 ordersrefunds,我们想要找出所有已经下单但尚未退款的订单:

SELECT order_id
FROM orders
MINUS
SELECT order_id
FROM refunds;

这个查询将返回 orders 表中所有 order_id,这些 order_idrefunds 表中没有对应的记录。

注意事项:

  • 使用 MINUS 时,两个查询选择的列数必须相同,并且数据类型兼容。
  • 两个查询中的结果集必须能够进行比较,也就是说,它们的列顺序和数据类型需要一致。
  • MINUS 操作符不支持 WHERE 子句,但是可以在每个子查询中使用 WHERE 来过滤结果。
  • MINUS 操作符在某些情况下可能不如 NOT EXISTSLEFT JOIN 效率高,特别是在处理大量数据时。

如果你需要更复杂的查询或者想要在 MINUS 中使用条件过滤,你可能需要考虑使用 LEFT JOINNOT EXISTS 子句来替代。