MySQL连接子串

时间:2014-06-17 14:19:44

标签: mysql substring inner-join

我在各种格式的列中有很长的字符串列表。我想搜索该子字符串,然后在离开原始列时组织该列。

有一个表有8列,其中一列包含字符串。另一个表中还有一个单词列表。我想将列表中的单词与这些字符串作为附加列进行匹配。在“Tom”,“tom”,“tom az”,“Tom Hanks”这样的大表中会有这样的情况,所有这些都会有另一列只有“Tom”(列表中相应的匹配)。

我考虑过使用JOIN函数,但不确定如何使用子字符串。 excel逻辑将是“= IF((SEARCH(”Tom“,”asfj Tom dsf“)),” TOM”, “NULL”)。

如果找到多个匹配项,我想使用早期“ID”(1到11mil的整数列)。

1 个答案:

答案 0 :(得分:0)

问题仍然有点含糊不清。您应该真正显示表结构,示例数据和预期结果。

假设您拥有这种最小的结构和数据:

CREATE TABLE People (
  id INTEGER AUTO_INCREMENT PRIMARY KEY,
  FullName TEXT
);
INSERT INTO People (FullName) VALUES ('Tom Hanks');
INSERT INTO People (FullName) VALUES ('Mary 467');
INSERT INTO People (FullName) VALUES ('ann margaret' );
INSERT INTO People (FullName) VALUES ('ziddy tom');
INSERT INTO People (FullName) VALUES ('bloody mary');
INSERT INTO People (FullName) VALUES ('mary ann');

CREATE TABLE Names (
  id INTEGER AUTO_INCREMENT PRIMARY KEY,
  Name TEXT
);  
INSERT INTO Names (Name) VALUES ('Tom' );
INSERT INTO Names (Name) VALUES ('Mary');
INSERT INTO Names (Name) VALUES ('Ann' );

...然后你可以通过这样的查询获得第一个结果:

SELECT p.*, n.Name
FROM People p
JOIN Names  n ON p.FullName LIKE CONCAT('%',LOWER(n.Name),'%');

(在SQLFiddle here上测试)

虽然存在一些问题。

  1. 目前尚不清楚您是否只想搜索整个单词。您的Excel示例不会这样做,所以我坚持使用简单的LIKE。要搜索整个单词,LIKE将无法正常工作。
  2. “mary ann”出现两次,因为FullName包含两个名称。你说你想根据ID选择一个,但是你不清楚你是否理解了这个问题。