【问题标题】:MySQL Select Where/LikeMySQL选择哪里/喜欢
【发布时间】:2021-09-03 22:00:18
【问题描述】:

我需要关于 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 列。 有了上面的数据,row1的选择结果就是Toyota。

【问题讨论】:

  • 您可以添加一些数据,以便我们更好地了解您在做什么我们需要minimal reproducible example
  • 我添加了你的数据和更新命令
  • 谢谢!抱歉耽搁了。我花了一段时间来测试我的更新触发器。

标签: mysql where-clause


【解决方案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小提琴here

【讨论】:

  • 原来我抢了先机。经过更多测试后,我意识到它仍然只适用于完全匹配的字符串,而不仅仅是字符。知道需要改变什么吗?
  • 它完全符合您的要求dbfiddle.uk/…
  • 我会再测试一些!谢谢。
  • 我已经进行了广泛的测试。如果 Tab2 id 1 具有“abcde”,它应该能够返回任何结果(Mazda、Toyota、Honda),但它只会返回 Mazda,因为它与字符串“abc”匹配。我已经多次重新排列两个表中的字符,它是按字符串匹配的,而不是单个字符,无论顺序如何。
  • 这不是一个单词比较,就像你在 sql 中做的那样,你想检查每一次出现,你必须在一个函数中编程,而不是你要求的。
猜你喜欢
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多