2014-03-07 49 views
1

我必须对Oracle进行查询,我有点卡住了它。在我的TABLE1中,我有287条记录,所以我想要TABLE2和TABLE3中的所有信息,例如我的287条记录(这就是为什么我使用左连接)。但我也希望TABLE2和TABLE4,TABLE4和TABLE5之间匹配的所有记录(这就是为什么我使用Inner Join)。卡在多个左连接和内部连接

但我的查询不起作用,我不知道为什么。有人可以帮助我吗?

我的查询:

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 ... ; 

图来理解: Graph Tables

THX的意见!

+0

你是什么意思您的查询不起作用?你是否收到故障信息?如果是这样,那么这条消息是什么?或者,您运行的查询是否已经运行,但它没有返回您期望的数据? –

+0

我在TABLE5的投影中看不到任何值...您是否在WHERE子句中使用它(您没有显示)? –

+0

我不会告诉你所有的查询。隐藏了一些信息。我真正的朋友是与lefjoin/innerjoin。我有以下错误:“ORA-00904:”TABLE4“。”CDEXE“:无效标识符” – Drupal8ForTheWin

回答

0

你确定你不想加入到table4吗?它只能写入TABLE4中的值的方式将被允许,这会限制table2和table5的结果。

注意 - 图像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 ... ; 
1

我认为这里的问题也许是你真的不希望使用在查询内部联接,也许你不知道其中的差别是什么内部连接和外部之间加入。

查询中的内部联接将仅返回TABLE4中与TABLE2匹配的行。连接是连续的和累积的,因此您剩余的LEFT连接将在连接的左侧具有减少的行集。

因此,我相信你会想使用左联接整个查询,例如:

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 ... ; 
+0

那么thx,我的查询现在工作,但我已经0结果为CODEXE:/ – Drupal8ForTheWin