Oracle SQL自联接在同一语句中

问题描述 投票:0回答:1

我正在努力实现以下目标。任何帮助将非常感谢!

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
sql oracle self-join
1个回答
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 

它更容易阅读但我们需要更多信息,输入+预期输出以确认它是否符合您的意图。

© www.soinside.com 2019 - 2024. All rights reserved.