MySQL Select Where/Like
MySQL Select Where/Like
我需要有关 select 语句中的 WHERE/LIKE 子句的帮助。我希望它的 return 值来自 table1.results WHERE/LIKE table2.selection 列包含来自 table1.data 列的所有字符。
如果 selection 列包含字符“abc”并且数据列包含“bc”,那么它可能是匹配项。如果 selection 列有“abc”而数据列有“abcd”,那么它将不匹配,因为 selection 列缺少“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 行的 selection 结果将是 Toyota。
根据你的少量样本数据,它应该看起来像
因为这可能有多个结果,所以您的 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 , '%'))
| results |
| :------ |
| Mazda |
| Toyota |
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 | selection | selection_results
-----: | :-------- | :----------------
1 | abde | Toyota
2 | abcd | Mazda
3 | ab | null
db<>fiddle here
我需要有关 select 语句中的 WHERE/LIKE 子句的帮助。我希望它的 return 值来自 table1.results WHERE/LIKE table2.selection 列包含来自 table1.data 列的所有字符。
如果 selection 列包含字符“abc”并且数据列包含“bc”,那么它可能是匹配项。如果 selection 列有“abc”而数据列有“abcd”,那么它将不匹配,因为 selection 列缺少“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 行的 selection 结果将是 Toyota。
根据你的少量样本数据,它应该看起来像
因为这可能有多个结果,所以您的 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 , '%'))
| results | | :------ | | Mazda | | Toyota |
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 | selection | selection_results -----: | :-------- | :---------------- 1 | abde | Toyota 2 | abcd | Mazda 3 | ab | null
db<>fiddle here