如何判断数据格式不一致本身是否一致?

时间:2014-01-08 17:14:23

标签: sql database

客户向我们发送了几个表,我们需要能够相互交叉引用。不幸的是,我们需要用于交叉引用的列具有不一致的格式化数据。

然而,看起来像它们以一致的方式不一致。即,在一列中,有一个“名称”,在另一列中有一个名称前面有一个4位数的id代码和一个空格,所以“1234名称”。

如果不一致是正确的,那么我们可以通过调用MySQL子串函数来使用数据。但我不相信。我如何确定不一致性是否具有普遍性?如果还有其他不一致之处我还没看到怎么办?

我需要知道的是,columnA中的所有唯一值是否为substring(columnB,6)中的所有唯一值。

我在MySQL上并不擅长并尝试了一些查询,但是他们要么返回所有结果(不是明显的结果),要么他们已经在服务器上“中断”,因为那里有很多数据,他们需要永远运行。帮助

2 个答案:

答案 0 :(得分:1)

您可以使用not exists子句执行此操作:

select t1.*
from t1
where not exists (select 1
                  from t2
                  where t2.name = substring(t1.columnB, 6)
                 );

这将根据您提供的规则识别t1.columnB中没有匹配名称的所有t2

答案 1 :(得分:0)

这是一个需要解决的可怕问题 - 特别是如果您不熟悉SQL。

原则上,我总是将这种数据视为“不受信任” - 无论您认为适用的规则通常会随着时间推移而变得虚假。

我的策略是使用“脏”数据通过运行SQL查询来填充类似的“干净”表,而不是尝试直接使用“脏”数据。

因此,您可以使用您认为最合适的架构创建两个表<然后通过将substring(columnB, 6)插入该表来填充该表。通过添加where子句(例如isnumeric(substring(t1.columnB, 6))),您可以验证您的假设。

一旦有了“干净”的表格,就可以轻松地进行联接。