我有兩個表。 indRailType
包含一個與我在其他表格中用於指示導軌類型的ID值配對的名稱列表。 WO_BreakerRail
包含一個日期列和一個鐵路代碼列,它對應於indRailType
中的同一代碼和一些其他數據。對於每個日期,每種軌道類型的任何活動都有WO_BreakerRail
。所以我可以有3行記錄爲3/19/2010
,每行代表一個不同的鐵路代碼,以及發生了什麼。使用WHERE子句的左外連接
當我使用下面的LEFT OUTER JOIN
時,我得到了一張包含所有類型的導軌的表格,其中19行沒有任何事發生在行中的空值。現在,這只是工作,因爲我的WO_BreakerRail
表中現在只有一個日期,第19個。當我用不同日期添加更多行時,事情就會變得不合時宜。
這是我的SQL語句,現在給了我正是我想要的結果:
SELECT WO_BreakerRail.ID, indRailType.RailType, WO_BreakerRail.CreatedPieces,
WO_BreakerRail.OutsideSource, WO_BreakerRail.Charged,
WO_BreakerRail.Rejected, WO_BreakerRail.RejectedToCrop
FROM indRailType
LEFT OUTER JOIN WO_BreakerRail
ON indRailType.RailCode = WO_BreakerRail.RailCode
現在,當我在WHERE WO_BreakerRail.Date = @Date
條款我失去了在什麼也沒有發生的JOIN
所有行補充。我不想那樣。從閱讀起,這聽起來像是我想要的完整OUTER JOIN
,但SQL Server Compact Edition不支持FULL OUTER JOIN
s。有沒有辦法解決這個問題,還是我正在尋找其他的東西?
不要忘記考慮@Date的「時間」部分。如果值在午夜和午夜之間可能有所不同,那麼必須使用某種形式的between子句。 – 2010-03-23 15:21:03
這個答案完美無缺,謝謝。 菲利普:感謝那個指針,雖然我在這個項目的早些時候遇到了這個問題,但是我最終把它修復到了我的C#代碼中,刪除了所有的時間部分,每天都會默認到午夜。 – Wesley 2010-03-23 15:30:22
@韋斯利,最好是「落地」日期時間數據類型來消除時間,所以時間是00:00:00.000而不是午夜。 – 2010-03-23 15:32:24