【问题标题】:SQL Contains From Table Column [closed]SQL包含来自表列[关闭]
【发布时间】:2014-03-16 13:06:37
【问题描述】:

我在一个数据库中有两个表。两者都有名为“公司名称”的列。 我想比较这些列的名称是否相似。

例如:Table1.CompanyName = 2i Ltd /// Table2.CompanyName = 2i Limited.

【问题讨论】:

  • 您的问题不清楚。您期望查询的结果是什么?
  • 您使用的是什么 DBMS? MySQL、SQL Server、Postgre 等?
  • 我有来自两个不同表的两列,其中包含名称。例如,表 1 中的“公司名称”列包含“ABC Ltd.”表 2 中的“公司名称”列包含“ABC Co. Ltd.”。我想要的是一个查询,它输出那些相似但不相等的名称。我尝试过 LIKE "[CompanyName]" 但没有成功。
  • 所以你要求模糊匹配。您使用的是哪个数据库平台?
  • 您需要准确定义相似的含义。字符的出现、字符串的出现、语义相似度、语音相似度……我不知道标准 SQL 中定义了什么,你用的是什么引擎?

标签: sql database ms-access contains sql-like


【解决方案1】:

我猜你的意思是:如何将它们连接在一起并比较相等或模糊的东西。

您可以使用允许模糊匹配的 Oracle Text 执行此操作:

select  t1.CompanyName
from    Table1 t1
join    Table2 t2
on      contains(t1.CompanyName, t2.CompanyName) > 0

在 Access 中存在多种可能性,但您必须自己编写。查看this article(要粘贴的代码很多)。

【讨论】:

  • @user1427266: 运气好吗?
【解决方案2】:

让我们创建两个示例表来准备我们的数据

CREATE TABLE #Table1 (CompanyName VARCHAR(35))
CREATE TABLE #Table2 (CompanyName VARCHAR(35))
GO
INSERT INTO #Table1 (CompanyName)
SELECT '2i Ltd'
UNION ALL
SELECT 'Xyz Ltd'
UNION ALL
SELECT 'Abc Inc'
GO
INSERT INTO #Table2 (CompanyName)
SELECT '2i Limited'
UNION ALL
SELECT 'Xyz Lmtd'
UNION ALL
SELECT 'ZZZ Corp'

还有一个部分匹配的 SELECT 查询(我使用 LEFT 4 个字符在表 1 中查找相似的公司名称。

SELECT 
        t1.CompanyName,
        t2.CompanyName

FROM #Table1 t1
JOIN #Table2 t2
ON t1.CompanyName LIKE '%' + LEFT(t2.CompanyName, 4) + '%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多