【问题标题】:Unique rows in join result连接结果中的唯一行
【发布时间】:2018-10-03 14:36:32
【问题描述】:

我有一张delascurencies 的表格,看起来像这样

curecnies
id,code

pairs (the available pairs of curencies )
id  to_sell to_buy

deals 
id
user_id
pair_id
amount_to_sell
amount_to_buy

所以我需要获取所有可以执行的匹配交易,但我无法获取唯一匹配。

这是我的sql查询

select *
from deals as d1
join deals d2
    on d1.sell_amount = d2.buy_amount and d1.buy_amount = d2.sell_amount

我得到的结果看起来像这样 编号 |用户 ID |对ID |购买金额 |销售金额 |编号 |用户 ID |对ID |购买金额 |销售金额

1|2|1|1000|3000|2|1|2|3000|1000
2|1|2|3000|1000|1|2|1|1000|3000

【问题讨论】:

  • 请通过样本数据向我们展示您的结果集中哪些不是唯一的。
  • 我将 2 个交易行作为一个结果行重复
  • 您如何看待 2 笔交易?您将两个交易匹配在一起,那么您想如何报告呢?您是要报告一条记录,还是要两条记录,每场比赛各一条?
  • 我希望考虑的 2 笔交易是独一无二的。
  • 那么您要报告两条条记录,还是一条记录?

标签: mysql join unique


【解决方案1】:

您可以在这里尝试使用最小/最大技巧:

SELECT t1.*, t2.*
FROM
(
    SELECT DISTINCT
        LEAST(d1.id, d2.id) AS d1_id,
        GREATEST(d1.id, d2.id) AS d2_id
    FROM deals AS d1
    INNER JOIN deals d2
        ON d1.sell_amount = d2.buy_amount AND
           d1.buy_amount = d2.sell_amount
) d
INNER JOIN deals t1
    ON d.d1_id = t1.id
INNER JOIN deals t2
    ON d.d2_id = t2.id;

这里的基本思想是标记为d 的子查询使用最小/最大技巧找到一对匹配的交易ID。然后,我们再次加入deals 表两次,以获取该交易对中每个成员的完整信息。

【讨论】:

  • 不,我想在一行中获得 2 笔交易,但不是第二笔(请参阅问题正文)
  • @YurGasparyan 试试我更新的答案。它不应该只为每对匹配的交易记录返回一行。
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 2011-07-12
  • 2016-02-21
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多