相交和减号操作

时间:2015-02-24 17:05:19

标签: mysql database

我在Mysql中设置操作时遇到问题。我想通过以下代码来获得净利润。

select sum(trnscn_income_amount) from transactions2

minus

select sum(trnscn_expense_amount) from transactions1;

但是减号不会变成蓝色,因此它会在减号后给出语法错误。

负操作必须以不同的方式完成吗?

1 个答案:

答案 0 :(得分:0)

MySQL不支持MINUS集合运算符。

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

如果要返回两个查询返回的值之间的差异,只需减去它们,例如:

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中使用经典的"反连接" pattern:左连接返回左侧的所有行,以及右侧的匹配行,然后过滤掉所有匹配的行,留下左侧没有匹配的行。但我不认为这是你想要做的。

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

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