Sql 如何连接具有不同行数的两个表
我已经在网上搜索过了,但它不能解决我的问题 我有两张桌子,一张10行,另一张9行 表1Sql 如何连接具有不同行数的两个表,sql,oracle,Sql,Oracle,我已经在网上搜索过了,但它不能解决我的问题 我有两张桌子,一张10行,另一张9行 表1 RNUM JOB_ID ---------- ---------- 1 AC_ACCOUNT 2 AC_MGR 3 AD_ASST 4 AD_PRES 5 AD_VP 6 FI_ACCOUNT 7 FI_MGR 8 HR_REP 9
RNUM JOB_ID
---------- ----------
1 AC_ACCOUNT
2 AC_MGR
3 AD_ASST
4 AD_PRES
5 AD_VP
6 FI_ACCOUNT
7 FI_MGR
8 HR_REP
9 IT_PROG
10 MK_MAN
表2
RNUM JOB_ID
---------- ----------
1 AC_ACCOUNT
2 AC_MGR
3 AD_ASST
4 AD_PRES
5 AD_VP
6 FI_ACCOUNT
7 FI_MGR
8 HR_REP
9 IT_PROG
我想连接这两个表,但我想输出如下
RNUM JOB_ID RNUM JOB_ID
---------- ---------- ---------- ----------
1 AC_ACCOUNT null null
2 AC_MGR 1 AC_ACCOUNT
3 AD_ASST 2 AC_MGR
4 AD_PRES 3 AD_ASST
5 AD_VP 4 AD_PRES
6 FI_ACCOUNT 5 AD_VP
7 FI_MGR 6 FI_ACCOUNT
8 HR_REP 7 FI_MGR
9 IT_PROG 8 HR_REP
10 MK_MAN 9 IT_PROG
我的第一个代码是
select a.*, b.*
from samp a, samp2 b where a.rnum = b.rnum(+)
但是我的代码的结果是
RNUM JOB_ID RNUM JOB_ID
---------- ---------- ---------- ----------
1 AC_ACCOUNT 1 AC_ACCOUNT
2 AC_MGR 2 AC_MGR
3 AD_ASST 3 AD_ASST
4 AD_PRES 4 AD_PRES
5 AD_VP 5 AD_VP
6 FI_ACCOUNT 6 FI_ACCOUNT
7 FI_MGR 7 FI_MGR
8 HR_REP 8 HR_REP
9 IT_PROG 9 IT_PROG
10 MK_MAN null null
我想将表2的1号条目(AC_帐户)连接到表1的2号条目(AC_MGR),正如您在我所需的输出中看到的那样
我使用rownum作为一种技术,只是为了在两个表之间建立连接
我想我误解了这里的左外连接,请告诉我如何实现我想要的输出 我相信这个查询会起到作用:
Select a.*, b.*
From samp a
Left Outer Join samp2 b On b.rnum + 1 = a.rnum
Order by a.rnum;
两个表都有AC_帐户为什么不连接具有相同AC_帐户的表?您没有ORDER BY,因此将没有ORDER。此外,您的加入是在a.rnum=b.rnum上进行的,但这不是您想要的结果。你到底想要什么,真让人困惑!你可以在a.rnum是b.rnum+1的地方做,但我怀疑这不完全是你做的want@user7294900您好,谢谢您的回复,但是您将他们与AC_帐户连接是什么意思?除了表1中的最后一个表外,这两个表实际上具有相同的数据。请解释当两个表存在更多差异时的逻辑。如果表2有一个表1没有的键怎么办?什么是表1有三个表2没有的键?如果他们没有共同点呢?你有一般的逻辑吗?@LoztInSpace Hi,谢谢你的回复。这实际上是我第二次尝试,结果也不太好。从a.rnum=b.rnum+1上的samp a左外部联接samp2 b中选择a.*,b.*,该联接产生相同的输出,只是表1现在从2开始(WC_MGR),其第10个数据是1号(AC_帐户)。我写了你想要的代码了吗?嗨,谢谢你的回复。如果是(+)格式,它会是什么样子?我尝试了这个错误,但从samp a,samp2 b中选择a.*,b.*,其中(+)b.rnum+1=a.rnum order by a.rnumI不鼓励使用特定于Oracle的外部联接语法,因为它不可移植,但它看起来像
select a.*,b.*从samp a,samp2 b中选择b.rnum(+)+1=a.rnum order by a.rnum
。