0

我有两个表,其中包含 ZipCodes,每个表中它们都是相同的。列数据类型相同且大小也相同。有谁知道为什么我的观点没有正确更新?对于第二个表,它总是显示 NULL。谢谢

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

邮政编码就像这个 05412。普通的 5 位数拉链。

4

3 回答 3

2

我必须查看您的数据才能给出可靠的答案,但我怀疑 table2 中没有符合条件的记录:

dbo.Table2.key = dbo.Table1.key

由于您在此条件下进行左连接,因此将为 Table1 中的每条记录返回空值,这些记录在 table2 中没有匹配的记录。

查看这篇文章,以更好地了解不同类型的连接是如何工作的:

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

于 2012-08-15T16:54:32.783 回答
2

我将建议一些事情,如果ZipCode字段上的数据类型是 avarchar那么您可能会遇到空格问题,因此您可以尝试修剪该值以删除任何空格。如果有空格,则无法匹配记录:

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))

但是您需要确保您的数据存在于所有表中。否则你将得不到任何结果。

于 2012-08-15T16:55:03.760 回答
0

这是使用批量加载命令上传 csv 的格式问题...我将其导入访问数据库,然后将其导入我的 sql 数据库,没有任何问题。0dd

于 2012-08-21T19:40:14.337 回答