我正在尝试在两个表上执行内部联接,并且没有返回任何记录。两个表都在邮政编码上加入,邮政编码存储为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语句返回带有邮政编码和地址的记录:
SELECT PostalCode, Address, FROM SecondTable WHERE PostalCode = 'A1A1A1'
当我在第一个表上尝试此查询时,不会返回任何记录:
SELECT Name, PostalCode FROM FirstTable WHERE PostalCode = 'A1A1A1'
这非常令人困惑,因为在Excel中手动查看表会显示邮政编码存在记录。
有没有人有任何想法?
答案 0 :(得分:2)
当我在第一个表上尝试此查询时,不会返回任何记录:
SELECT Name, PostalCode FROM FirstTable WHERE PostalCode = 'A1A1A1'
那你去吧。在此之前,连接也不起作用。所以你有一些不好的数据。以下是一些您可以尝试帮助缩小错误范围的查询:
SELECT Name, PostalCode, Len(PostalCode) FROM FirstTable WHERE PostalCode LIKE '%A1A1A1'
SELECT Name, PostalCode, Len(PostalCode) FROM FirstTable WHERE PostalCode LIKE 'A1A1A1%'
SELECT Name, PostalCode, Len(PostalCode) FROM FirstTable WHERE PostalCode LIKE '%A1A1A1%'
SELECT Name, PostalCode, Len(PostalCode) FROM FirstTable WHERE PostalCode LIKE 'A%1A1A1%'
......以及同一主题的更多变化。
答案 1 :(得分: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), '')
答案 2 :(得分: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),'')
谢谢大家!