2015-02-24 64 views
0

我在Mysql中设置操作时遇到问题。我想申请以下代码来获得净利润。Inrersect和minus操作

select sum(trnscn_income_amount) from transactions2 

minus 

select sum(trnscn_expense_amount) from transactions1; 

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

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

回答

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 set操作符(在其他关系数据库中可用)的操作,那么你可以在MySQL中使用经典的“反连接”模式来模拟该操作:左连接返回左侧的所有行,以及匹配右侧的行,然后过滤掉所有匹配的行,留下没有匹配的左侧行。但我不认为这真的是你想要做的。如果MINUS集合运算符在MySQL支持

此查询等同于原始查询:

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