mysql - MySQL选择哪里/喜欢
问题描述
我需要关于 select 语句中的 WHERE/LIKE 子句的帮助。我希望它从 table1.results 返回值 WHERE/LIKE table2.selection 列包含 table1.data 列中的所有字符。
如果选择列有字符“abc”并且数据列有“bc”,那么它可能是匹配的。如果选择列有“abc”,而数据列有“abcd”,那么它将不匹配,因为选择列缺少“d”。
我尝试了不同的运算符和正则表达式,但无法弄清楚。
表格1:
wdt_id | data | results
1 | abcd | Mazda
2 | abde | Toyota
3 | ace | Honda
表2:
wdt_id | selection | selection_results
1 | abde | null
2 | abcd | null
3 | ab | null
陈述:
SELECT results
FROM table1
WHERE table1.data LIKE concat(‘%’,table2.selection,'%');
编辑:我在上面添加了一些数据。select 语句是大型 UPDATE 触发器的一部分。触发器更新 selection_results 列。使用上述数据,第 1 行的选择结果将是丰田。
解决方案
使用您的少量样本数据,它应该看起来像
由于这可能会产生多个结果,因此您的 SELECT 需要一个 LIMIT 1 和一个 ORDER BY,您必须检查
CREATE TABLE Tab1 (wdt_id int, data varchar(10), results vARCHAR(20))
INSERT INTO Tab1 (`wdt_id`, `data`, `results`) VALUES ('1', 'abcd', 'Mazda'), ('2', 'abde', 'Toyota'), ('3', 'ace', 'Honda');
CREATE TABLE Tab2 (wdt_id int , selection varchar(20),selection_results varchar(20))
INSERT INTO Tab2 (`wdt_id`, `selection`, `selection_results`) VALUES ('1', 'abde', null), ('2', 'abcd', null), ('3', 'ab', null);
SELECT results FROM Tab1 WHERE EXISTS ( SELECT 1 FROM Tab2 WHERE selection LIKE CONCAT('%', Tab1.data , '%'))
| 结果 | | :-------- | | 马自达 | | 丰田 |
UPDATE Tab2 SET `selection_results` = (SELECT results FROM Tab1 WHERE Tab2.selection LIKE CONCAT('%', Tab1.data , '%') ORDER BY wdt_id LIMIT 1)
SELECT * FROM Tab2
wdt_id | 选择 | 选择结果 -----: | :-------- | :---------------- 1 | 阿布德 | 丰田 2 | abcd | 马自达 3 | ab | 空值
db<>在这里摆弄
推荐阅读
- android - 点击应用链接不会直接打开免安装应用
- c - 使用 AVX2 左移(float32 数组)并用零填充
- mysql - 使用 Intellij 在 Docker 中连接到 MYSQL
- javascript - Reactjs 动态更新 Body 的背景图片
- c++ - Visual Studio 2019 - 为文件类型设置默认扩展名
- python - 如何在版本控制中维护使用 venv 制作的 Python 项目
- discord.net - Discord.net 找出某人是否有角色
- python - 导出时如何使用pandas数据框na_rep和float_format?
- python-3.x - 通过 PPA 更新 Python3 后 Linux Mint 更新管理器不起作用
- reactjs - 如何从 react-create-app 创建一个捆绑文件