1

2 つのテーブルで内部結合を実行しようとしていますが、レコードが返されません。両方のテーブルは、VARCHAR(50) として格納されている郵便番号で結合されています。

    SELECT 
        T1.Name
       ,T1.PostalCode
       ,T2.Address
    FROM FirstTable as T1
        INNER JOIN SecondTable as T2 ON T1.PostalCode = T2.PostalCode

その結果、レコードは返されません。両方のテーブルの郵便番号フィールドから空白を削除しようとしましたが、まだ結果がありません。

次に、別の選択ステートメントを使用して問題を絞り込もうとしました。以下の select ステートメントは、郵便番号と住所を含むレコードを返します。

    SELECT PostalCode, Address, FROM SecondTable WHERE PostalCode = 'A1A1A1'

最初のテーブルでこのクエリを実行すると、レコードが返されません。

    SELECT Name, PostalCode FROM FirstTable WHERE PostalCode = 'A1A1A1'

Excel でテーブルを手動で表示すると、郵便番号のレコードが存在することが明らかになるため、これは非常に厄介です。

誰か考えがありますか?

4

3 に答える 3

1

私はあなたのすべての提案を組み合わせて解決策を見つけました。問題は、最初のテーブルの郵便番号の末尾に非表示のキャリッジ リターン文字があったことです。

/* See if any postal codes are more than 6 characters long. */
SELECT *, LEN(PostalCode)
FROM FirstTable
WHERE LEN(PostalCode) > 6

/* Find out the ASCII code for the hidden character. */
SELECT ASCII(RIGHT(PostalCode,1))
FROM FirstTable

/* Trimming hidden new line character (ASCII Code 13) from records. */
UPDATE FirstTable
SET PostalCode = REPLACE(PostalCode,CHAR(13),'')

みんな、ありがとう!

于 2013-08-15T15:14:58.863 に答える
1

トリミングしても削除されない隠し改行文字がある可能性があります。

テーブルに対してクエリを実行し、フィールドの長さをチェックして、期待どおりかどうかを確認してください。

SELECT Name, PostalCode, LEN(PostalCode)
FROM FirstTable
WHERE LEN(PostalCode) > 6 -- or whatever value.

改行文字を削除するには。

UPDATE FirstTable SET PostalCode = SET REPLACE(REPLACE(PostalCode, CHAR(13), ''), CHAR(10), '')
于 2013-08-15T14:21:05.643 に答える