SQL内部联接 - 不返回所有记录

时间:2016-02-03 13:39:51

标签: sql

我正在尝试使用内部联接从两个表中获取结果,这是有效的。 但是有第三个连接,这是原始表,所以我使用了表3(T3)中的别名

但是一些结果没有返回,当T3连接为零时,它不会返回任何结果。

我如何解决这个问题,即使第三次加入没有返回任何结果,我也想要记录。

select
'ID' = T1.ID,
'Code' = T1.NOMCode,
'Account Name' = T1.NOMName,
'Group Code' = T1.NOMGroup,
'Group Name' = T2.NOMAccountGroup,
'Combine Code' = T1.NOMCombinedCode,
'Combine Name' = T3.NOMName,
'Comments' = T1.NOMComments
from PARAM_NOMINALCODES T1
inner join PARAM_NOMINALACCOUNTGROUPS T2
on T1.NOMGroup = T2.ID
inner join  PARAM_NOMINALCODES T3
on T3.nomcode = T1.nomcombinedcode
where T1.NOMName <> 'Spare' and T1.NOMName <> 'Inactive'

2 个答案:

答案 0 :(得分:1)

然后你必须使用LEFT JOIN而不是INNER JOIN:

select
'ID' = T1.ID,
'Code' = T1.NOMCode,
'Account Name' = T1.NOMName,
'Group Code' = T1.NOMGroup,
'Group Name' = T2.NOMAccountGroup,
'Combine Code' = T1.NOMCombinedCode,
'Combine Name' = T3.NOMName,
'Comments' = T1.NOMComments
from PARAM_NOMINALCODES T1
inner join PARAM_NOMINALACCOUNTGROUPS T2
on T1.NOMGroup = T2.ID
LEFT JOIN PARAM_NOMINALCODES T3
on T3.nomcode = T1.nomcombinedcode
where T1.NOMName NOT IN('Spare','Inactive')

BTW而不是两个条件使用NOT IN来比较两个或更多值

INNER JOIN意味着只返回回答ON编码的记录,其他所有内容都将被过滤。

LEFT JOIN意味着(位置)左表将返回所有记录,右表将仅返回满足条件的记录

答案 1 :(得分:1)

将T3上的inner join更改为left join可以解决您的问题。

编辑:实际上,您可以尝试使用T3作为您选择的表格,并将其他两个表格连接起来吗?像这样:

select
'ID' = T1.ID,
'Code' = T1.NOMCode,
'Account Name' = T1.NOMName,
'Group Code' = T1.NOMGroup,
'Group Name' = T2.NOMAccountGroup,
'Combine Code' = T1.NOMCombinedCode,
'Combine Name' = T3.NOMName,
'Comments' = T1.NOMComments
from PARAM_NOMINALCODES T3
left join  PARAM_NOMINALCODES T1
on T3.nomcode = T1.nomcombinedcode
left join PARAM_NOMINALACCOUNTGROUPS T2
on T3.nomvode = T2.ID
where T1.NOMName <> 'Spare' and T1.NOMName <> 'Inactive'