【问题标题】:Oracle SQL Self-joins in the same statementOracle SQL 自联接在同一条语句中
【发布时间】:2019-07-26 18:28:59
【问题描述】:

我正在努力实现以下目标。任何帮助将不胜感激!

1.在第一个表中,对一个主交易及其对应的偏移交易进行自连接 2.在第二个表中,找到所有与对应的抵消交易价格不匹配的主要交易。

我认为第二个自联接不起作用。这应该将价格表中的主要交易和抵消交易联系起来,并找出某些价格日期的价格不匹配的情况。

SELECT *
FROM transactions tran1 transactions tran2
    ,prices pr1
    ,prices pr1
WHERE tran1.tran_type = 1 --Original deal 
    AND tran2.tran_type = 2 -- Offset deal 
    AND tran1.tran_num = tran2.offset_tran_num
    AND tran1.ins_num = pr1.ins_num
    AND tran2.ins_num = pr2.ins_num
    AND pr1.ins_num = pr2.ins_num
    AND pr1.profile_num = pr2.profile_num
    AND pr1.price_date = pr2.price_date
    AND pr1.value != pr2.value

【问题讨论】:

  • 混淆数据及其输出
  • 嗨,1) 添加连接语句 - 通过来分隔表给出 carthersian 乘积,2) 应用唯一的表别名 - 现在您有 pr1 两次,3) 将连接条件从 WHERE 移动到 FROM 子句跨度>
  • 你为什么不认为第二个自加入工作?您是否遇到错误,或者不是您预期的结果?请添加示例数据、预期结果以及您的问题现在会发生什么。此外,请考虑改用现代连接语法,这样我们和您都可以更轻松地了解正在发生的事情,并可能减少编码错误。

标签: sql oracle self-join


【解决方案1】:

此语句可以受益于使用正确的连接语法,而不是这种旧样式 - 在尝试转换它时,您可以立即看到别名 'pr1' 被使用了两次,你的意思是使用 'pr2'

鉴于这是正确的,(假设您可能需要一些帮助来将其转换为现代语法)您有:

SELECT *
FROM transactions tran1
inner join prices pr1 on pr1.ins_num = tran1.ins_num 
inner join prices pr2 on pr2.ins_num = pr1.ins_num
                      and pr2.profile_num = pr1.profile_num 
                      and pr2.price_date = pr1.price_date
                      and pr2.value != pr1.value
inner join transactions tran2 on tran2.ins_num = pr2.ins_num 
                      and tran2.offset_tran_num = tran1.tran_num 
WHERE tran1.tran_type = 1 --Original deal
AND tran2.tran_type = 2 -- Offset deal 

它更易于阅读,但我们需要更多信息、输入 + 预期输出来确认它是否是您想要的。

【讨论】:

  • 您好,感谢您发送此信息!不幸的是,续集没有返回任何东西,尽管我可以看到“价格”表中有价格,它们在主要交易和抵消交易中有所不同。我还注意到在第 4 行和第 5 行,有相同的语句?
  • 修复了复制粘贴 - 如果它没有返回任何内容,则说明连接的逻辑不正确 - 依次完成每个操作并确认您对连接应该是什么的理解 - 我们可以在没有更多信息的情况下特别有用。
  • 顺序如下: 1.) 在“交易”表中链接主要交易和抵消交易。 2.) 在“价格”表中,链接特定价格日期的主要交易和抵消交易的价格。 3.) 找出所有不匹配的情况
  • 我看到您在第三个内部连接中链接了主要交易和抵消交易。不确定该序列是否会产生影响..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2014-10-30
  • 2016-11-21
  • 2019-04-21
  • 2013-03-23
相关资源
最近更新 更多