SQL Server左联接未给出正确的结果
你好 我已经读到了人们在使用左连接时面临的一些其他问题,没有给出正确的结果,也许我没有很好地理解所有的答案 这就是我的问题所在SQL Server左联接未给出正确的结果,sql,sql-server,select,join,left-join,Sql,Sql Server,Select,Join,Left Join,你好 我已经读到了人们在使用左连接时面临的一些其他问题,没有给出正确的结果,也许我没有很好地理解所有的答案 这就是我的问题所在 SELECT TA.column1 ,D.column2 ,D.column3 ,TA.column4 ,MI.[column5] ,MI.[column6] ,D.[column7] ,D.[column8] ,TA.[column9]
SELECT
TA.column1
,D.column2
,D.column3
,TA.column4
,MI.[column5]
,MI.[column6]
,D.[column7]
,D.[column8]
,TA.[column9]
,TA.[column10]
,UC.[column11]
,UC.[column12]
,TA.[column13]
,TA.[column14]
,TA.[column15]
,TA.[column16]
,TA.[column17]
,'0' AS column18
,TA.[column19]
,'12.2' AS column20
,'None' AS column21
,'0' AS column22
,'1' AS column23
,TA.[column24]
,'0' AS column25
,'0' AS column26
,LD.column27
FROM [DB].[dbo].[Table1] AS TA WITH (NOLOCK)
FULL OUTER JOIN
[DB].[dbo].[Table2] AS LD WITH (NOLOCK)
ON
TA.[coulmn1]=LD.[coulmn5]
INNER JOIN
[DB].[dbo].[Table3] AS MI WITH (NOLOCK)
ON
TA.coulmn10 = MI.[coulmn3]
LEFT JOIN
[DB].[dbo].[Table4] AS D WITH (NOLOCK)
ON
TA.coulmn25 = D.coulmn1
INNER JOIN
[DB1].[dbo].[Table5] AS UC WITH (NOLOCK)
ON
TA.coulmn12 = UC.coulmn3
WHERE
(LD.coulmn5 != TA.[coulmn1])
AND
(TA.[coulmn23]= '0')
问题是当我更新查询并删除
FULL OUTER JOIN
[DB].[dbo].[Table2] AS LD WITH (NOLOCK)
ON
TA.[coulmn1]=LD.[coulmn5]
并删除以下where条款:
在右表中,我的视图中有3个结果。这是正确的,因为左表中没有写入一个结果
当我放回左外部联接和where子句时,我再次只看到2个结果,如果没有最后一列LD.column27显示为NULL的三个结果的话。
此列将接受NOT NULL这可能是我没有获得首选结果的原因吗?使用左外部联接而不是完全外部联接,并删除'WHERE LD.coulmn5!=TA.coulmn1]和“部分”
试试这个:
SELECT
TA.column1
,D.column2
,D.column3
,TA.column4
,MI.[column5]
,MI.[column6]
,D.[column7]
,D.[column8]
,TA.[column9]
,TA.[column10]
,UC.[column11]
,UC.[column12]
,TA.[column13]
,TA.[column14]
,TA.[column15]
,TA.[column16]
,TA.[column17]
,'0' AS column18
,TA.[column19]
,'12.2' AS column20
,'None' AS column21
,'0' AS column22
,'1' AS column23
,TA.[column24]
,'0' AS column25
,'0' AS column26
,LD.column27
FROM [DB].[dbo].[Table1] AS TA WITH (NOLOCK)
LEFT OUTER JOIN [DB].[dbo].[Table2] AS LD WITH (NOLOCK) ON TA.[coulmn1]=LD.[coulmn5]
INNER JOIN [DB].[dbo].[Table3] AS MI WITH (NOLOCK) ON TA.coulmn10 = MI.[coulmn3]
LEFT JOIN [DB].[dbo].[Table4] AS D WITH (NOLOCK) ON TA.coulmn25 = D.coulmn1
INNER JOIN [DB1].[dbo].[Table5] AS UC WITH (NOLOCK) ON TA.coulmn12 = UC.coulmn3
WHERE (TA.[coulmn23]= '0')
应:
SELECT
TA.column1
,D.column2
,D.column3
,TA.column4
,MI.[column5]
,MI.[column6]
,D.[column7]
,D.[column8]
,TA.[column9]
,TA.[column10]
,UC.[column11]
,UC.[column12]
,TA.[column13]
,TA.[column14]
,TA.[column15]
,TA.[column16]
,TA.[column17]
,'0' AS column18
,TA.[column19]
,'12.2' AS column20
,'None' AS column21
,'0' AS column22
,'1' AS column23
,TA.[column24]
,'0' AS column25
,'0' AS column26
,LD.column27
FROM [DB].[dbo].[Table1] AS TA WITH (NOLOCK)
FULL OUTER JOIN
[DB].[dbo].[Table2] AS LD WITH (NOLOCK)
ON
TA.[coulmn1]=LD.[coulmn5]
INNER JOIN
[DB].[dbo].[Table3] AS MI WITH (NOLOCK)
ON
TA.coulmn10 = MI.[coulmn3]
LEFT JOIN
[DB].[dbo].[Table4] AS D WITH (NOLOCK)
ON
TA.coulmn25 = D.coulmn1
INNER JOIN
[DB1].[dbo].[Table5] AS UC WITH (NOLOCK)
ON
TA.coulmn12 = UC.coulmn3
WHERE
(LD.coulmn5 is null)
AND
(TA.[coulmn23]= '0')
没有,仍然是一样的,只看到结果中都有数据tables@user3676496您能用示例数据解释一下吗?在查询中,您应该在所有内部联接之后才使用所有左联接以获得正确的结果,另一方面,在左连接之前使用的所有内部连接都将被视为仅左连接。我在删除内部连接[DB1].[dbo].[Table5]后,在查询中发现了为什么它不能正常工作的问题当UC在TA.coulmn12=UC.coulmn3上带有NOLOCK时,当我再次添加数据时,数据就在那里。我没有得到任何结果。这可能是因为我将不同的数据库加入到我的查询中?这是因为数据的性质。尝试更改表5的左连接的内部连接,看看会发生什么。它现在正在工作。它是Dmitry和Saharsh提供的答案的混合体。在我得到DB2连接后,没有给我结果。我删除了WHERE LD.coulmn5为null,只剩下WHERE TA。[coulmn23]=“0”现在数据显示正确。谢谢你们两位的帮助。
SELECT
TA.column1
,D.column2
,D.column3
,TA.column4
,MI.[column5]
,MI.[column6]
,D.[column7]
,D.[column8]
,TA.[column9]
,TA.[column10]
,UC.[column11]
,UC.[column12]
,TA.[column13]
,TA.[column14]
,TA.[column15]
,TA.[column16]
,TA.[column17]
,'0' AS column18
,TA.[column19]
,'12.2' AS column20
,'None' AS column21
,'0' AS column22
,'1' AS column23
,TA.[column24]
,'0' AS column25
,'0' AS column26
,LD.column27
FROM [DB].[dbo].[Table1] AS TA WITH (NOLOCK)
FULL OUTER JOIN
[DB].[dbo].[Table2] AS LD WITH (NOLOCK)
ON
TA.[coulmn1]=LD.[coulmn5]
INNER JOIN
[DB].[dbo].[Table3] AS MI WITH (NOLOCK)
ON
TA.coulmn10 = MI.[coulmn3]
LEFT JOIN
[DB].[dbo].[Table4] AS D WITH (NOLOCK)
ON
TA.coulmn25 = D.coulmn1
INNER JOIN
[DB1].[dbo].[Table5] AS UC WITH (NOLOCK)
ON
TA.coulmn12 = UC.coulmn3
WHERE
(LD.coulmn5 is null)
AND
(TA.[coulmn23]= '0')