【问题标题】:SQL join table on partial string部分字符串上的 SQL 连接表
【发布时间】:2019-03-20 18:52:59
【问题描述】:

我在 Postgres 数据库中有两个表:

表 A:

**Middle_name**
John
Joe
Fred
Jim Bob
Paul-John

表 B:

**Full_name**
Fred, Joe, Bobda
Jason, Fred, Anderson
Tom, John, Jefferson
Jackson, Jim Bob, Sager
Michael, Paul-John, Jensen

有时中间名带有连字符或中间有空格。但是中间名中从来没有逗号。如果是连字符或两个中间名,则表 A 和表 B 中的条目仍然相同。

我想加入Middle_nameFull_name 上的表格。困难的部分是连接必须只检查Full_name 中逗号之间的值。否则可能会意外匹配名字。

我一直在使用下面的查询,但我刚刚意识到没有什么可以阻止它意外地将中间名与名字匹配。

SELECT Full_name, Middle_name
FROM B
JOIN A
ON POSITION(Middle_name IN Full_name)>0

我想知道如何重构此查询以仅匹配中间名(假设它们都以相同的格式出现)。

【问题讨论】:

  • 我没有中间名。只是说...

标签: sql postgresql string-parsing


【解决方案1】:

使用split_part('Fred, Joe, Bobda', ',', 2)返回中间名joe

SELECT Full_name, Middle_name
FROM B
JOIN A
ON split_part(B.Full_name, ',', 2)=A.Middle_name

demo for returning middle name

【讨论】:

    【解决方案2】:

    如果 always 在逗号后正好有一个空格,并且 everybody 有一个中间名,如您的示例数据所示,则空格可以只是分隔符的一部分split_part():

    SELECT full_name, middle_name
    FROM   A
    JOIN   B ON split_part(B.full_name, ', ', 2) = A.middle_name;
    

    相关:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      相关资源
      最近更新 更多