You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LIKE结合IN筛选匹配boltPatterns的Vehicles数据?

需求与解决方案

数据表结构与测试数据

CREATE TABLE IF NOT EXISTS botPatterns (
  `boltP` varchar(200) NOT NULL
);

INSERT INTO `botPatterns` (`boltP`) VALUES
  ('6X135/6X139.7'),
  ('8X165.1'),
  ('8X165.1/8X170'),
  ('8X170');


CREATE TABLE IF NOT EXISTS Vehicles (
  `Brand` varchar(200) NOT NULL,
  `Pattern` varchar(200) NOT NULL
);

INSERT INTO `Vehicles` (`Brand`,`Pattern`) VALUES
  ('Audi','6X135'),
  ('Audi','8X165.1'),
  ('BMW','8X170'),
  ('Ford','9X139.7');

查询需求

  • 获取所有存在对应螺栓模式的车辆数据,匹配规则:
    1. 车辆的螺栓模式与botPatterns中的值精确匹配(比如Audi的8X165.1)
    2. 车辆的螺栓模式包含在botPatterns中以/分隔的任一子模式里(比如Audi的6X135包含在6X135/6X139.7中)
  • 不符合匹配规则的(比如Ford的9X139.7)不应被返回

现有查询的问题

当前使用的查询语句仅支持精确匹配,无法满足包含匹配的需求:

select * from vehicles
where pattern in 
(
    select boltp from botpatterns
)

解决方案

方案1:使用FIND_IN_SET函数

通过将botPatterns中的/替换为逗号,把分隔的子模式转为逗号分隔的列表,再用FIND_IN_SET检查车辆模式是否在列表中:

SELECT v.*
FROM Vehicles v
JOIN botPatterns bp 
  ON FIND_IN_SET(v.Pattern, REPLACE(bp.boltP, '/', ',')) > 0;

方案2:使用LIKE模糊匹配

通过给模式前后拼接/,避免出现部分匹配的误判,再用LIKE进行匹配:

SELECT v.*
FROM Vehicles v
JOIN botPatterns bp 
  ON CONCAT('/', bp.boltP, '/') LIKE CONCAT('%/', v.Pattern, '/%');

两种方案都能返回除Ford外的所有车辆数据,满足需求。


内容的提问来源于stack exchange,提问作者PyDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:26:15