Mysql 如果second select为空,如何忽略?

Mysql 如果second select为空,如何忽略?,mysql,sql,Mysql,Sql,我的目标是计算账户突变(借贷) 这是我当前的SQL语句: SELECT (SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833) - (SELECT sum(Transaction_Value) FROM transactions WHERE Date

我的目标是计算账户突变(借贷)

这是我当前的SQL语句:

SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Source=99005571818061833)
预期结果是: 返回帐户值

实际结果是: 空的

问题是,如果第4行没有找到行,则无论第2行是否返回值,它都将返回null

例如,如果我们对此表数据运行SQL语句:

ID  Date        Source              Destination         Transaction_Value
168 2020-11-24  SETORAN TUNAI       99005571818061833   1000000.0000
169 2020-11-24  98993563492155716   98993563492155717   1000.0000

返回值将为null,因为SQL语句未找到Source==“99005571818061833”的行。

我是SQL新手。这并不意味着有效,如果你有一个更有效的方式和解释的答案,请随意回答。我将把它标记为答案

答案是:

SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
IFNULL((SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN 2020-11-01 AND 2020-11-30 AND Source=99005571818061833), 0)
解释如下:

结果表明,如果用null减去一个数字,返回值将为null

比如说

SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
null
预期结果将为空


所以。。。从逻辑上讲,如果第4行返回null,则应将其更改为0。

用户条件聚合如下:

SELECT sum(CASE WHEN Destination = 99005571818061833 THEN Transaction_Value
                WHEN Source = 99005571818061833 THEN -Transaction_Value
                ELSE 0
           END)
FROM transactions
WHERE Date BETWEEN 2020-11-01' AND '2020-11-30' AND
      99005571818061833 IN (Source, Destination)

您应该考虑源或目标为空。@P.Salmon您的意思是选择结果=>null还是防止目标为空?我喜欢您只使用1 FROM,我认为这是一个更好的解决方案。但是,我尝试对不存在的帐号运行此操作,它返回的值为
1000000.0000
。我将尝试调整此查询。我发现了问题。我试图查询不存在的账号,例如
SELECT*FROM bankaccount.transactions,其中Destination=99005571818061836此查询返回
目的地===99005571818061833
的值。目标的数据类型为CHAR(17)。我认为这是根本问题。我会查查查查的。谢谢。这是因为我没有添加“”,例如
SELECT*FROM bankaccount.transactions,其中Destination=“99005571818061836”
这将返回null。