【问题标题】:How to use SQL to approximately match two columns in two tables?如何使用 SQL 来近似匹配两个表中的两列?
【发布时间】:2021-11-04 20:18:34
【问题描述】:

我有两张桌子AB。表A有两列cust_idaddress,数据类似

'12345678', '457 Edinburgh Ln Heber City UT 84032-1442'

表 B 只有一列,highvalue_blocks,它存储了大量的名称。名称是表 A address 列的部分。

例如,highvalue_blocks 之一可能是 'Ln Heber City'

'Ln Heber City''457 Edinburgh Ln Heber City UT 84032-1442' 的一部分。它应该被批准。

问题:如何编写SQL语句查询address以检查high values blocks是否在其中?

我尝试使用这个 SQL:

SELECT A.CUST_ID
FROM A
WHERE A.ADDRESS LIKE (SELECT '%'||B.HIGHVALUE_BLOCKS||'%' FROM B)

它有效。但我认为它可以更有效地解决,因为它需要很长时间才能完成。

请帮忙。非常感谢。

【问题讨论】:

  • 这种基于 LIKE 的 join 会导致交叉 join(Explain 中的 product join),当然会消耗大量资源。两个表的行数是多少?
  • @dnoeth 。 . .查询真的有效吗?我希望它返回子查询返回多行的错误。
  • @GordonLinoff:它会按原样失败,但我假设在实际查询中添加了缺少的关键字 ANY,否则 OP 不会抱怨 完成时间很长 :-) LIKE 可以引用 Teradata 中的模式列表,并且该列表可以由子查询提供,例如col LIKE ANY ('...', '...') 用于 ORed 和 LIKE ALL 用于 AND 条件。

标签: sql teradata


【解决方案1】:

在关系数据库中,您应该使用“键”(主键和外键)关联 2 个或多个表以检索数据。 如果不是,至少必须有一个匹配的列 如果满足上述任何一个条件,则可以进行内连接以检索数据

这是一个很好的实践来实现**

归一化

** 构建 RDMBS 表时

【讨论】:

  • 欢迎来到 StackOverflow!虽然您是对的,但正确的做法是使用 FK 建立规范化的数据库模式,我们都知道现实往往更加混乱,因此这个答案无助于解决手头的问题。请查看answer guide,了解有关提供答案的有用提示。
猜你喜欢
  • 2020-01-11
  • 2020-10-31
  • 2017-06-28
  • 1970-01-01
  • 2021-03-05
  • 2014-09-15
  • 2017-07-23
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多