首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inrersect和minus运算

Inrersect和minus运算
EN

Stack Overflow用户
提问于 2015-02-25 01:05:19
回答 1查看 37关注 0票数 0

我在Mysql的集合操作中遇到了一个问题。我想执行以下代码来获得净利润。

代码语言:javascript
复制
select sum(trnscn_income_amount) from transactions2

minus

select sum(trnscn_expense_amount) from transactions1;

但是减号没有变成蓝色,因此在减号之后会出现语法错误。

负号运算必须以不同的方式来完成吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-25 01:15:40

MySQL不支持MINUS集运算符。

但是,即使是这样,它在该查询中似乎也没有多大意义。该查询基本上是返回一行,除非满足特定条件。

如果要返回两个查询返回的值之间的差值,只需将它们相减即可,例如:

代码语言:javascript
复制
SELECT i.tot_income - e.tot_expense 
  FROM (SELECT SUM(trnscn_income_amount) AS tot_income FROM transactions2) i
 CROSS
  JOIN (SELECT SUM(trnscn_expense_amount) AS tot_expense FROM transactions1) e

但这与MINUS集合运算符有本质上的不同。如果您想要的是像MINUS集运算符(在其他关系数据库中可用)这样的操作,则可以在MySQL中使用经典的“反联接”模式进行模拟:左联接返回左侧的所有行,以及右侧的匹配行,然后过滤掉所有匹配的行,留下左侧的不匹配的行。但我不认为这真的是你想要做的。

如果MySQL支持MINUS集运算符,则此查询等同于原始查询:

代码语言:javascript
复制
SELECT i.tot_income
  FROM (SELECT SUM(trnscn_income_amount) AS tot_income FROM transactions2) i
  LEFT
  JOIN (SELECT SUM(trnscn_expense_amount) AS tot_expense FROM transactions1) e 
    ON e.tot_expense = i.tot_income
 WHERE e.tot_expense IS NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28701886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档