Sql 卡在多个左连接和内连接上
我必须对Oracle进行一次查询,我有点被它卡住了。在我的表1中,我有287条记录,因此我希望表2和表3中的所有信息都与我的287条记录一致(这就是我使用Left Join的原因)。但我还需要表2和表4、表4和表5之间匹配的所有记录(这就是我使用内部联接的原因) 但我的问题不起作用,我也不知道为什么。有人能帮我吗 我的问题是:Sql 卡在多个左连接和内连接上,sql,oracle,left-join,inner-join,Sql,Oracle,Left Join,Inner Join,我必须对Oracle进行一次查询,我有点被它卡住了。在我的表1中,我有287条记录,因此我希望表2和表3中的所有信息都与我的287条记录一致(这就是我使用Left Join的原因)。但我还需要表2和表4、表4和表5之间匹配的所有记录(这就是我使用内部联接的原因) 但我的问题不起作用,我也不知道为什么。有人能帮我吗 我的问题是: SELECT distinct(TABLE1.NUM_SIN), TABLE1.LIBELLE, TABLE1.DATE_FRA
SELECT distinct(TABLE1.NUM_SIN),
TABLE1.LIBELLE,
TABLE1.DATE_FRAIS,
TABLE2.CODE_SIN,
TABLE2.PKPR,
TABLE1.MT,
TABLE4.POSTBUD,
TABLE3.VEENG
FROM TABLE1
LEFT JOIN TABLE2
ON TABLE2.NUM_SIN = TABLE1 .NUM_SIN
INNER JOIN TABLE4
ON TABLE4.NUM_SIN = TABLE2.NUM_SIN
AND TABLE4.SCSO = TABLE2.SCSO
LEFT JOIN TABLE5
ON TABLE5.CDC = TABLE4.NO
AND TABLE5.CDEXE = TABLE4.CDEXE
AND TABLE5.SCSO = TABLE4.SCSO
LEFT JOIN TABLE3
ON TABLE3.CNCT = TABLE1.NUM_SIN
WHERE ... ;
要理解的图形:
建议中的Thx 您确定不想继续加入表4吗?只允许使用表4中的值写入,这将限制表2和表5的结果 注意-图像CDN在这里被过滤,所以我看不到图像
SELECT --
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE2.NUM_SIN = TABLE1 .NUM_SIN
LEFT JOIN TABLE3 ON TABLE3.CNCT = TABLE1.NUM_SIN
-- unless you want to reduce the number of table2 rows use left join here.
LEFT JOIN TABLE4 ON TABLE4.NUM_SIN = TABLE2.NUM_SIN AND TABLE4.SCSO = TABLE2.SCSO
LEFT JOIN TABLE5 ON TABLE5.CDC = TABLE4.NO
AND TABLE5.CDEXE = TABLE4.CDEXE
AND TABLE5.SCSO = TABLE4.SCSO
WHERE ... ;
我认为这里的问题可能是您真的不想在查询中使用内部联接,并且可能您不知道内部联接和外部联接之间的确切区别 查询中的内部联接将只返回表4中与表2中匹配的行。联接是连续和累积的,因此剩余的左侧联接将在联接的左侧具有缩减的行集 因此,我相信您会希望在整个查询过程中使用左连接,例如:
SELECT distinct(TABLE1.NUM_SIN),
TABLE1.LIBELLE,
TABLE1.DATE_FRAIS,
TABLE2.CODE_SIN,
TABLE2.PKPR,
TABLE1.MT,
TABLE4.POSTBUD,
TABLE3.VEENG
FROM TABLE1
LEFT JOIN TABLE2
ON TABLE2.NUM_SIN = TABLE1 .NUM_SIN
LEFT JOIN TABLE4
ON TABLE4.NUM_SIN = TABLE2.NUM_SIN
AND TABLE4.SCSO = TABLE2.SCSO
LEFT JOIN TABLE5
ON TABLE5.CDC = TABLE4.NO
AND TABLE5.CDEXE = TABLE4.CDEXE
AND TABLE5.SCSO = TABLE4.SCSO
LEFT JOIN TABLE3
ON TABLE3.CNCT = TABLE1.NUM_SIN
WHERE ... ;
你的查询不起作用是什么意思?您是否收到故障信息?如果是,信息是什么?或者,您运行的查询是否没有返回您期望的数据?我在表5的投影中没有看到任何值。。。您是否在WHERE子句中使用它(您没有显示)?我没有显示所有查询。有些信息是隐藏的。我真正的pblm是与lefjoin/innerjoin。我有以下错误:“ORA-00904:“TABLE4”。“CDEXE”:无效标识符“我的坏,在m中选择“.TABLE5.POSTBUD…”,而不是TABLE4。我重命名得太快了。ora904错误很可能与在TABLE4上创建CDEXE列的方式有关。如果在创建表(或更改以添加列)时使用双引号,那么在查询中也必须使用双引号。这也可能是大小写问题,因此您需要确保在引用列时使用了正确的大小写。thx,我的查询现在可以工作了,但我对CODEXE的结果为0:/