Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 卡在多个左连接和内连接上_Sql_Oracle_Left Join_Inner Join - Fatal编程技术网

Sql 卡在多个左连接和内连接上

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

我必须对Oracle进行一次查询,我有点被它卡住了。在我的表1中,我有287条记录,因此我希望表2和表3中的所有信息都与我的287条记录一致(这就是我使用Left Join的原因)。但我还需要表2和表4、表4和表5之间匹配的所有记录(这就是我使用内部联接的原因)

但我的问题不起作用,我也不知道为什么。有人能帮我吗

我的问题是:

 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:/