我有一张这样的桌子:
身份证号码
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)