2

我在 SQL 中有一个如下所示的表:

[样品表[1]

现在,我想要基于 2 个条件的结果表:

  1. Prev_trans_id 应该与 transactions_ID 匹配

  2. 只有那些条目应该出现在金额值不相等的地方。

结果表应如下所示:

结果表

所以,在结果表中,我不希望 Transcation_ID 为 104 的行,因为金额的 mod 是相同的。支付了 1 美元,并退还了 1 美元。

我能够完成其中的第一部分,但由于我是 SQL 新手,所以无法完成第二部分。这是我第一部分的代码:

select * from sample_table
where prev_trans_id in 
        (select transaction_id from sample_table)

如果我可以将第二个条件也包含在同一个查询中,那将非常有帮助。

4

2 回答 2

1

使用 a JOIN,而不是IN

SELECT t1.*
FROM sample_table AS t1
JOIN sample_table AS t2 
    ON t1.prev_trans_id = t2.transaction_id AND t1.amount != -1 * t2.amount

顺便说一句,这不是mod数量,而是您要比较的数量的否定。

于 2018-06-27T18:45:53.253 回答
1

这里不需要使用子查询,因为它可以通过对and的基本select ... from ... where ...查询来实现。请看下面的查询:table1table2

select table2.*
from sample_table table1, sample_table table2
where table1.transaction_id = table2.prev_trans_id
and (table1.amount - table2.amount) <> 0
于 2018-06-27T18:59:01.060 回答