【问题标题】:MySQL join on substringMySQL加入子字符串
【发布时间】:2014-06-17 14:19:44
【问题描述】:

我有一长串不同格式的字符串。我想搜索该子字符串,然后在保留原始列的同时组织该列。

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

我曾考虑过使用 JOIN 函数,但不确定如何使用子字符串来实现。 excel 逻辑类似于 "=IF((SEARCH("Tom","asfj Tom dsf"))," TOM","NULL")。

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

【问题讨论】:

  • 外部网站的excel截图不是这里做题的方法。将信息放在问题中......可能是代码逻辑,而不是屏幕截图。
  • 感谢您的帮助。我很难解释我的话,但希望逻辑是有帮助的。
  • 您使用的是什么关系型数据库?这可能会有所帮助。列表中的值是常量吗?他们住在另一张桌子上吗?还是什么?
  • MYSQL。有一个包含 8 列的表,其中一列包含字符串。另一个表中还有一个单词列表。我想将列表中的这些单词与这些字符串作为附加列进行匹配。在“Tom”、“tom”、“tom az”、“Tom Hanks”的大表中,会有另一列只有“Tom”(列表中的相应匹配项)。
  • 好的...请将所有这些信息放在问题本身中。当该字符串包含多个搜索词时,还要指定您期望的内容。

标签: mysql substring inner-join


【解决方案1】:

这个问题还是有点模棱两可。您应该真正展示表格结构、示例数据和预期结果。

假设你有这个最小的结构和数据:

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 选择一个,但不清楚您是否理解问题。

【讨论】:

  • 谢谢,我想我已经弄清楚我想要做什么了。非常感谢您的帮助。
  • 对于任何在今年查看此内容的人,我发现 INSTR 函数对我的数据更快(大约 3200 行与 2000 行)。参考:w3schools.com/sql/func_mysql_instr.asp
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多