LEFT OUTER JOIN当有记录时让我在正确的桌子上获得NULLS

时间:2017-06-23 19:37:59

标签: sql left-join

下面是我的左外联接查询:

    SELECT  N.ACCOUNT, N.FLD1, N.FLD2, P.ACCOUNT,P.FLD1, P.FLD2, P.FLD3, P.FLD4,     P.FLD5, P.FLD6 

FROM NEWYORK N LEFT OUTER JOIN PITTSBURG P  ON   N.ACCOUNT = P.ACCOUNT
WHERE N.FLD1 in ('EC','BP','J1','MP','C1','BP','AD','E1' )
AND N.FLD2 = 'CHICAGO' 
GROUP BY
  N.ACCOUNT, N.FLD1, N.FLD2,  P.ACCOUNT,P.FLD1, P.FLD2, P.FLD3, P.FLD4, P.FLD5, P.FLD6 

(1)我的查询在P.ACCOUNT,P.FLD1,P.FLD2,P.FLD3,P.FLD4,P.FLD5,P.FLD6中得到我(null)。 (2)当我做[从PITTSBURG P选择* - 这里有所有与NEWYORK N账户匹配的账户,所有账户都是P.ACCOUNT,P.FLD1,P.FLD2,P.FLD3,P.FLD4,P。 FLD5,P.FLD6有数据)。

想知道我的查询在右表中存在实际匹配记录时返回(null)记录。

非常感谢你的帮助

3 个答案:

答案 0 :(得分:1)

问题应该在where子句中,如果记录匹配就像你在字段ACCOUNT中所说的那样,你在where子句中得到null,可能是在你应用where子句时,NEWYORK表中的结果行在ACCOUNT字段与PITTSBURG表中有相应的匹配,测试删除where子句并查看结果。

答案 1 :(得分:0)

我可以使用可用的联接来查看您的记录是否确实匹配,请参阅: What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?

如果他们没有,请检查列中的变量类型是否存在不匹配(例如:nvarchar vs int)

答案 2 :(得分:0)

1-测试查询:

SELECT  N.ACCOUNT, N.FLD1, N.FLD2, P.ACCOUNT,P.FLD1, P.FLD2, P.FLD3, P.FLD4,     P.FLD5, P.FLD6
FROM NEWYORK N LEFT OUTER JOIN PITTSBURG P  ON   N.ACCOUNT = P.ACCOUNT

如果您有数据

2-检查 FLD2列有'CHICAGO'数据?对于此查询:

SELECT  N.ACCOUNT, N.FLD1, N.FLD2, P.ACCOUNT,P.FLD1, P.FLD2, P.FLD3, P.FLD4,     P.FLD5, P.FLD6 
FROM NEWYORK N LEFT OUTER JOIN PITTSBURG P  ON   N.ACCOUNT = P.ACCOUNT
WHERE N.FLD2 = 'CHICAGO' 

3-检查FLD1列是否有'EC','BP','J1','MP','C1','BP','AD','E1'数据?

SELECT  N.ACCOUNT, N.FLD1, N.FLD2, P.ACCOUNT,P.FLD1, P.FLD2, P.FLD3, P.FLD4,     P.FLD5, P.FLD6 
FROM NEWYORK N LEFT OUTER JOIN PITTSBURG P  ON   N.ACCOUNT = P.ACCOUNT
WHERE N.FLD2 = 'CHICAGO'
AND N.FLD1 in ('EC','BP','J1','MP','C1','BP','AD','E1' )

你的第一张桌子是纽约,第二张桌子是PITTSBURG

您没有任何已加入和已过滤的数据。 你必须检查过滤器和连接。