我在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_name
和Full_name
的表格。困难的部分是连接必须只检查Full_name
中逗号之间的值。否则它可能会意外地匹配名字。
我一直在使用下面的查询但我刚刚意识到没有什么能阻止它将中间名称与名字意外匹配。
SELECT Full_name, Middle_name
FROM B
JOIN A
ON POSITION(Middle_name IN Full_name)>0
我想知道如何重构这个查询以匹配中间名(假设它们都以相同的格式出现)。
使用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
如果逗号后面总是只有一个空格,并且每个人都有一个像样本数据所示的中间名,则该空间可以只是split_part()中分隔符的一部分:
SELECT full_name, middle_name
FROM A
JOIN B ON split_part(B.full_name, ', ', 2) = A.middle_name;
有关: