Sql-Server
SQL左連接返回空列
我正在嘗試
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 JOIN
betweendb1.dbo.table1
anddb2.dbo.table2
表,其中保留的一面是db1.dbo.table1
. 保留的一面意味著如果 atON
子句指定的匹配條件被評估為“假”或“未知”,則將返回左表或右表中的列值(取決於JOIN
您正在執行的操作:LEFT
或RIGHT
),而另一側的列值將失去(aNULL
將用作佔位符)。請看下圖,它顯示了
JOIN
操作是如何以圖形方式表示的。圖片來自這裡。
我希望這可以幫助你!