我要对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 ... ;
要了解的图表:
请咨询!
答案 0 :(得分:1)
我认为这里的问题可能是你真的不想在你的查询中使用内连接,也许你不确切知道内连接和外连接之间的区别。
查询中的内部联接将仅返回TABLE4中与TABLE2匹配的行。连接是连续的和累积的,因此剩余的LEFT连接将在连接的左侧具有减少的行集。
因此,我相信你会想在整个查询中使用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 ... ;
答案 1 :(得分: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 ... ;