首页 > 解决方案 > 在 SQL 中比较 2 个表的值时遇到问题

问题描述

我有一个表(Table1),其中包含我从一个简单的文本文件中引入的数据。每行都有一个 RowID,并且有以空值开头的页码和错误列,然后是保存文本文件中每一行的数据列。

在我的测试数据中,我知道 RowID 2 在 Data 列中有一个公司名称(大致位于原始文本文件的中心)。我需要将其与客户表的 Col01 进行比较,以查看公司名称是否存在。看起来它应该是一个简单的选择,但我得到零行,除非我对 Table1 中的值进行硬编码。

这是我没有运气尝试过的查询。

SELECT c.RowID, c.Col01, c.Col02 
FROM Customers c 
WHERE c.Col01 = 
    (SELECT RTRIM(LTRIM(t.Data)) 
     FROM Table1 t 
     WHERE t.RowID = '2')

如果我对 Table1 的 RowID 2 中的值进行硬编码,我会得到几个匹配项(在 Col02 和 Col03 中具有不同的地址)。所以我知道客户中有数据与 RowID 2 上表 1 的数据列中的值相匹配。

目标是将表 1 中的错误列更新为客户表中的客户 G 和非成员/客户的 B。

那么为什么上面的select语句在有匹配的时候返回零行呢?

我正在使用 MS SQL 2008。我尝试的硬编码版本是

SELECT c.RowID, c.Col01, c.Col02 FROM Customers c WHERE c.Col01 = 'Sunny Donuts'

table1 中的值在 Sunny 之前有 35 或 40 个空格,在 Donuts 之后有几十个空格,所以我使用 LTRIM 和 RTRIM 来摆脱它。

这返回了几行。客户表具有以下列:

Col01 是公司名称,col02 到 Col04 是地址、城市、州等。这些都可以是空值。

表 1 有这些列:

这些都是旧表(使用了几年)。在这两个表中,RowID 是一个标识规范,种子为 1,增量为 1。

标签: sqlsql-server

解决方案


谢谢诺亚,你是对的。

有隐藏字符(CR 和 LF)阻止了匹配。在我从 table1 中的数据中删除这些数据后,它解决了问题。


推荐阅读