2012-08-15 59 views
0

我有兩個ZipCodes表,它們在每個表中都是相同的。列數據類型相同且大小相同。有誰知道爲什麼我的觀點沒有更新正確嗎?它總是顯示NULL對於第二個表。謝謝SQL查看未加入

USE [DB] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER VIEW [dbo].[myview] 
AS 
SELECT  dbo.Table1.Division, dbo.Table1.RegionName AS Region, dbo.Table1.AccountDir AS RegionManager, dbo.Table2.key, 
         dbo.Table2.ZipCode, dbo.Table3.ZipCity, dbo.Table3.ZipCounty, dbo.Table3.ZipState 
FROM   dbo.Table2 LEFT OUTER JOIN 
         dbo.Table1 ON dbo.Table2.key = dbo.Table1.key LEFT OUTER JOIN 
         dbo.Table3 ON dbo.Table2.ZipCode = dbo.Table3.ZipCode 

ZipCodes就像這樣05412.正常的5位數的拉鍊。

+2

你能提供代碼嗎?現在這只是猜測。 – Taryn 2012-08-15 16:38:31

+0

「zipcode」字段的數據類型是什麼?你能發佈一些這些領域的樣本數據嗎?你確定兩個表中都有郵編嗎? – Taryn 2012-08-15 16:50:29

+0

@bluefeet varchar(10) – Intelwalk 2012-08-15 16:54:38

回答

0

這是一個格式化問題,用csv與批量加載命令一起上傳......我將它導入到一個訪問數據庫,然後將其導入到我的SQL數據庫沒有問題。 0dd

2

我會看到你的數據給了堅實的答案,但我懷疑有表2中沒有記錄滿足條件:

dbo.Table2.key = dbo.Table1.key 

既然你都做了左以此爲條件加入,空對於Table1中沒有匹配記錄的每個記錄,將返回值。

看看這篇文章,以更好地瞭解如何在不同類型的連接工作:

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

2

我要建議的幾件事情,如果在ZipCode字段的數據類型是一個varchar然後你可能有一個空白問題,所以你可以嘗試修剪該值以刪除任何空格。如果有空白,則無法匹配記錄:

SELECT dbo.Table1.Division, 
    dbo.Table1.RegionName AS Region, 
    dbo.Table1.AccountDir AS RegionManager, 
    dbo.Table2.key, 
    dbo.Table2.ZipCode, 
    dbo.Table3.ZipCity, 
    dbo.Table3.ZipCounty, 
    dbo.Table3.ZipState 
FROM dbo.Table2 
LEFT OUTER JOIN dbo.Table1 
    ON dbo.Table2.key = dbo.Table1.key 
LEFT OUTER JOIN dbo.Table3 
    ON LTRIM(RTRIM(dbo.Table2.ZipCode)) = LTRIM(RTRIM(dbo.Table3.ZipCode)) 

但是您需要確保您的數據存在於所有表中。否則,你將得不到結果。

+0

如何查看每個單元格中的數據細節?我填充了表格,但因爲某些原因ZIPCODES未加入 – Intelwalk 2012-08-15 17:49:49

+0

在'Table2'上單獨選擇一個,在'Table3'上單獨選擇一個以查看'zipcode'字段中是否有數據。 – Taryn 2012-08-15 17:52:27

+0

它在那裏,我只是不明白爲什麼它不加入。 – Intelwalk 2012-08-15 21:24:20