我在Mysql中设置操作时遇到问题。我想通过以下代码来获得净利润。
select sum(trnscn_income_amount) from transactions2
minus
select sum(trnscn_expense_amount) from transactions1;
但是减号不会变成蓝色,因此它会在减号后给出语法错误。
负操作必须以不同的方式完成吗?
答案 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