簡體   English   中英

MySQL加入子串

[英]MySQL join on substring

我在各種格式的列中都有一長串字符串。 我想搜索該子字符串,然后在保留原始列的同時組織該列。

一個表有8列,其中一列包含字符串。 在另一個表中也有單詞列表。 我想將列表中的單詞與那些字符串作為附加列進行匹配。 在“ Tom”,“ tom”,“ tom az”,“ Tom Hanks”的大表中將是這樣,所有這些列都只有一個“ Tom”(列表中的對應匹配項)。

我曾考慮過使用JOIN函數,但不確定如何使用子字符串。 excel邏輯將類似於“ = IF((SEARCH(“ Tom”,“ asfj Tom dsf”)),“ TOM”,“ NULL”)。

如果找到多個匹配項,我想使用帶有較早“ ID”的匹配項(一列從1到11mil的整數)。

這個問題仍然有點模棱兩可。 您應該真正顯示表結構,示例數據和預期結果。

假設您具有以下最小的結構和數據:

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測試過

雖然有一些問題。

  1. 目前尚不清楚是否只想搜索整個單詞。 您的Excel示例無法做到這一點,因此我堅持使用了一個簡單的LIKE。 要搜索整個單詞,LIKE將無法正常工作。
  2. “ mary ann”出現兩次是因為FullName包含兩個名稱。 您說過要根據ID選擇一個,但是尚不清楚您是否理解此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM