我有一张这样的桌子:
身份证号码
1个appletopic
2海洛莫尔
3可能是基本的
每行由两个单词的连接组成
还有一张字典桌
id名称频率
1个苹果300
2你600
3专题23
4你好234
我必须在mysql中有结果表
id |代码|第一个字|第二个字
1 |苹果|主题
2 |你好|更多
3 |可能是基本的|可能是基本的
如果两个单词组合是可能的,则选择频率最高的一个。
在mysql中如何做到这一点?

最佳答案

下面是使用左连接的解决方案:

-- SQL wanted
SELECT
    s.id, s.code,
    d.name FirstWord, SUBSTRING_INDEX(s.code, d.name, -1) SecondWord
FROM string s LEFT JOIN dict d ON s.code LIKE CONCAT(d.name, '%');

下面是一个完整的演示。
SQL语言:
-- data
create table string(id int, code char(100));
insert into string values
(1, 'appletopic'),
(2, 'hellomore'),
(3, 'maybebasic');
create table dict(id int, name char(100), frequency int);
insert into dict values
(1, 'apple', 300 ),
(2, 'you', 600 ),
(3, 'topic', 23),
(4, 'hello', 234);
SELECT * FROM string;
SELECT * FROM dict;

-- SQL wanted
SELECT
    s.id, s.code,
    d.name FirstWord, SUBSTRING_INDEX(s.code, d.name, -1) SecondWord
FROM string s LEFT JOIN dict d ON s.code LIKE CONCAT(d.name, '%');

输出:
mysql> SELECT * FROM dict;
+------+-------+-----------+
| id   | name  | frequency |
+------+-------+-----------+
|    1 | apple |       300 |
|    2 | you   |       600 |
|    3 | topic |        23 |
|    4 | hello |       234 |
+------+-------+-----------+
4 rows in set (0.00 sec)

mysql> SELECT
    -> s.id, s.code,
    -> d.name FirstWord, SUBSTRING_INDEX(s.code, d.name, -1) SecondWord
    -> FROM string s LEFT JOIN dict d ON s.code LIKE CONCAT(d.name, '%');
+------+------------+-----------+------------+
| id   | code       | FirstWord | SecondWord |
+------+------------+-----------+------------+
|    1 | appletopic | apple     | topic      |
|    2 | hellomore  | hello     | more       |
|    3 | maybebasic | NULL      | NULL       |
+------+------------+-----------+------------+
3 rows in set (0.00 sec)

10-06 01:36