Sql-Server

SQL左連接返回空列

  • May 12, 2018

我正在嘗試LEFT JOIN在兩個表上做一個,其中一個表有一個日期時間列,另一個表有一個日期列。當我在 SQL Server 中工作時,我曾經CONVERT將日期時間更改為日期。然後我寫了join語句:

SELECT CONVERT(date,db1.dbo.table1.datecolumn), db2.dbo.table2.datecolumn
FROM db1.dbo.table1
LEFT JOIN db2.dbo.table2 
   ON db1.dbo.table1.datecolumn = db2.dbo.table2.datecolumn

查詢返回 table1 中的日期列,但 table2 中的列僅填充 NULL 值。我不確定我做錯了什麼。我試過CAST而不是CONVERT,沒有運氣。轉換是否發生了什麼?任何幫助表示讚賞。

我猜你convert()在錯誤的地方做錯了。您必須在 的 equals 操作中執行此操作ON,它仍然datetime存在,無論您在所選列的列表中對其執行什麼操作。

嘗試:

SELECT CONVERT(date,db1.dbo.table1.datecolumn), db2.dbo.table2.datecolumn
FROM db1.dbo.table1
LEFT JOIN db2.dbo.table2 
   ON CONVERT(date,db1.dbo.table1.datecolumn) = db2.dbo.table2.datecolumn

其實功能沒有問題CONVERT。為什麼 date 的列 fromtable2返回 aNULL的原因,是因為不是JOIN.

您正在執行一個LEFT JOINbetween db1.dbo.table1anddb2.dbo.table2表,其中保留的一面是db1.dbo.table1. 保留的一面意味著如果 atON子句指定的匹配條件被評估為“假”或“未知”,則將返回左表或右表中的列值(取決於JOIN您正在執行的操作:LEFTRIGHT),而另一側的列值將失去(aNULL將用作佔位符)。

請看下圖,它顯示了JOIN操作是如何以圖形方式表示的。

在此處輸入圖像描述

圖片來自這裡

我希望這可以幫助你!

引用自:https://dba.stackexchange.com/questions/206532