【问题标题】:Matching company names in two tables在两个表中匹配公司名称
【发布时间】:2013-12-04 07:14:13
【问题描述】:

我有两个带有公司名称及其 id 的表,表 Corporation_NameIDNAME,另一个表 DATA_ExcelCORPORATION as ID and C_Name as name;我必须将数据表中的公司名称与Corporation Name 匹配,以确保所有公司都存在,否则我只需插入公司名称中不存在的公司即可。

目前我正在使用这个查询:

Select Distinct (B.corporation), B.C_name
from data_excel B, corporation_name A
where B.C_name <> A.name

有时也是这样:

87  Société Générale de Belgique
87  Societe Generale de Belgique

【问题讨论】:

  • 查找 nlssort 或 'Oracle Text' 以了解匹配重音字符的方法。例如,this question
  • 查询正常吗?用于查找 Data_Excel 中存在但 Corporation_Name 中不存在的名称
  • distinctNOT 一个函数。它始终对您的 select 语句的 all 列进行操作。列名周围的括号没有任何作用。

标签: sql string oracle duplicate-removal


【解决方案1】:

您的查询未找到您要查找的内容。你们都是来自 A 的公司,并将它们与 B 中的所有公司匹配,这意味着它将返回 Societe Generale Fortis

的记录

从这里开始:

    SELECT B.Corporation, B.C_Name
      FROM data_excel B
LEFT OUTER JOIN corporation_name A
        ON B.C_Name = A.Name
     WHERE A.Name IS NULL

这仍然不能解决所有问题,您仍然需要更换

        ON B.C_Name = A.Name

像 John Doyle 建议的那样,因为 Société 仍然无法匹配 Societe!

【讨论】:

  • 但此查询将返回所有在 Data_Excel 中但不在 Corporation Name 中的公司名称,除了 Société 将不匹配 Societe?
  • 是的。 'OUTER JOIN' 将尝试将 Excel 中的所有记录与数据库中的匹配记录进行匹配。正常的 JOIN 会删除不匹配的记录,但 LEFT OUTER JOIN 将包含那些您在 Excel 中匹配但在数据库中没有匹配的记录。然后数据库端将为空,这些是您感兴趣的记录。
  • 现在如果我想检查这些值,例如数据库中的 C_name,如果数据库中存在相似的名称,我该怎么做?
  • 我建议您查看 John Doyle 提供的链接,或者为此打开一个单独的问题。 “相似”的解释非常依赖于数据库:)
猜你喜欢
  • 1970-01-01
  • 2019-01-26
  • 2010-09-24
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
相关资源
最近更新 更多