0

ZipCodes を含む 2 つのテーブルがあり、各テーブルで同じです。列のデータ型は同じで、サイズも同じです。私のビューが正しく更新されない理由を誰かが知っていますか? 2 番目のテーブルでは常に 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

ZipCodes はこの 05412 のようなものです。通常の 5 桁の郵便番号です。

4

3 に答える 3

2

確かな答えを得るにはデータを確認する必要がありますが、テーブル 2 には条件を満たすレコードがないと思われます。

dbo.Table2.key = dbo.Table1.key

この条件で左結合を実行しているため、table2 に一致するレコードがない Table1 のすべてのレコードに対して null 値が返されます。

この記事を見て、さまざまな種類の結合がどのように機能するかをよりよく理解してください。

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

于 2012-08-15T16:54:32.783 に答える
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))

ただし、データがすべてのテーブルに存在することを確認する必要があります。そうしないと、結果が得られません。

于 2012-08-15T16:55:03.760 に答える
0

バルクロードコマンドでアップロードされているcsvのフォーマットの問題でした...アクセスデータベースにインポートしてから、問題なくSQLデータベースにインポートしました。0dd

于 2012-08-21T19:40:14.337 に答える