You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在游戏交易数据库中识别匹配的交易记录?

识别匹配的游戏交易记录

首先明确匹配交易的核心条件:两条交易记录需互相满足对方的游戏及平台需求,即:

  • 记录A的GameID + PlatformID = 记录B的RecivingGameID + RecivingGamePlatformID
  • 记录B的GameID + PlatformID = 记录A的RecivingGameID + RecivingGamePlatformID
  • 两条记录属于不同用户(UserID不同)

你的原始SQL仅检查字段值是否在全局范围内存在,没有关联到具体的对应记录,因此无法精准定位配对交易。以下是正确的实现方案:

测试数据

UserID  GameID  PlatformID  RecivingGameID  RecivingGamePlatformID  PostID
1111    18      167         41              43                      2312451124
2222    41      43          18              167                     1276949826
3333    41      43          18              21                      6798639876
4444    41      43          90              167                     4587938698

正确SQL语句

SELECT 
    a.PostID AS 发起交易帖ID,
    b.PostID AS 匹配交易帖ID,
    a.UserID AS 发起用户ID,
    b.UserID AS 匹配用户ID,
    CONCAT(a.GameID, '(平台', a.PlatformID, ')') AS 发起用户提供的游戏,
    CONCAT(b.GameID, '(平台', b.PlatformID, ')') AS 匹配用户提供的游戏
FROM Posts a
INNER JOIN Posts b
    -- 发起用户的游戏恰好是匹配用户想要的
    ON a.GameID = b.RecivingGameID
    AND a.PlatformID = b.RecivingGamePlatformID
    -- 匹配用户的游戏恰好是发起用户想要的
    AND b.GameID = a.RecivingGameID
    AND b.PlatformID = a.RecivingGamePlatformID
    -- 排除同一用户的交易
    AND a.UserID != b.UserID
    -- 避免重复输出同一组配对(比如A-B和B-A只保留一次)
    AND a.PostID < b.PostID;

结果说明

执行上述SQL后,只会返回唯一的匹配组:

发起交易帖ID  匹配交易帖ID  发起用户ID  匹配用户ID  发起用户提供的游戏  匹配用户提供的游戏
2312451124   1276949826   1111       2222       18(平台167)        41(平台43)

关键逻辑解析

  1. 自连接表:将Posts表自身连接,让每条记录与其他记录做配对检查
  2. 双向匹配条件:同时验证双方的游戏和平台需求互相满足
  3. 去重处理:通过a.PostID < b.PostID确保同一组配对只输出一次,避免重复结果

内容的提问来源于stack exchange,提问作者Simonalbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:48:22