MySQL 使用双左连接更新行,限制第一个匹配

2024-02-26

我有三张桌子(SQLFiddle 已创建表 http://sqlfiddle.com/#!9/a3dab)

橙色文本是我需要通过比较 Products.name 与 Filters.filter 获得的内容。

我发现子字符串匹配可以这样完成:

on Products.name LIKE CONCAT('%',Filters.filter,'%');

我只需要使用第一个过滤器匹配。所以“Mushroom soup”将匹配“Soup”而不是“Mushroom”。

这项任务的最佳方法是什么?

如果可能的话,请提供一个经过测试的 SQLFiddle 链接。

我尝试过的:(请随意跳过下面的所有内容)

尝试双连接:

update Products
left join Filters on Products.name LIKE CONCAT('%',Filters.filter,'%')
join Categories on Filters.category_name = Categories.name
set Products.category_id = Categories.id, Products.filter = Filters.filter;

但这并不会导致first正在使用匹配,因为第一个连接返回all过滤匹配(每个产品多行),第二次连接之后类别来自最后一个匹配。

例如:蘑菇汤进入“蘑菇配料”过滤器\类别,而不是“汤\餐食”。

还尝试了 join + order by:

select Products.name, Filters.* 
from Products
left join Filters on Products.name LIKE CONCAT('%',Filters.filter,'%')
group by Products.name;

这会根据我的需要返回每个产品的第一个匹配项,但我无法在同一查询中进行第二次左连接,也无法在“更新”功能而不是“选择”之后使用“分组依据”来工作。

当 sqlfiddle 崩溃时:

CREATE TABLE Products
(
    `name` varchar(30), 
    `category_name` varchar (30), 
    `category_id` int
);

INSERT INTO Products (`name`)
VALUES ('Mushrooms'), ('Can of mushrooms'),
       ('Can of soup'), ('Mushroom soup'),
       ('Tomato soup'), ('Tomato');

CREATE TABLE Filters
(
     `filter` varchar(30), 
     `category_name` varchar(30)
);

INSERT INTO Filters (`filter`, `category_name`)
VALUES ('Can of', 'Canned food'), ('Soup', 'Meals'),
       ('Mushroom', 'Ingredients'), ('Tomato', 'Ingredients');

CREATE TABLE Categories
(
     `id` int, 
     `name` varchar(30)
);

INSERT INTO Categories (`id`, `name`)
VALUES (1, "Canned food"), (2, 'Ingredients'), (3, 'Meals');

您使用 sqlfiddle 使任务变得非常简单,并尝试使用 Select 查询解决问题。

我猜它按照你想要的方式工作,我需要做的就是再添加一个与类别表的左连接(不知道为什么你无法加入类别,因为它工作正常)。

所以。我已将您的选择查询编辑如下:

select Products.name, Filters.*,Categories.id from Products
left join Filters
on Products.name LIKE CONCAT('%',Filters.filter,'%')
left join Categories
on Categories.name = Filters.category_name
GROUP BY Products.name;

您将通过此查询得到您想要的结果。

现在,为了更新Products表与此查询的结果,您可以执行以下操作:

update Products
left join Filters
on Products.name LIKE CONCAT('%',Filters.filter,'%')
left join Categories
on Categories.name = Filters.category_name
set Products.category_name = Filters.category_name, 
    Products.category_id = Categories.id;

单击此处查看工作演示 http://sqlfiddle.com/#!9/cd929/1/0

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 使用双左连接更新行,限制第一个匹配 的相关文章

随机推荐

  • 如何进行水平视差滚动

    我正在使用最新版本的 Bootstrap JQuery 和 Skrollr 我想要一个静态背景和几个在您通过视差滚动滚动时出现的场景 我可以在您滚动时制作场景 但我正在寻找一种方法 让您看起来不会向下移动页面 我正在寻找像这样的图像的场景
  • 使用 BigQuery 查询地理空间数据

    您好 我想获取基于 GPS 坐标的公共场所 餐厅 酒店 电影院等 邻居列表 BigQuery 可以做到这一点吗 如果您将经纬度或 GPS 坐标作为列 那么您绝对可以使用坐标上的 WHERE 比较从 BigQuery 中获取矩形区域 然后在选
  • 在 Windows 10 中找不到 tools.jar React Native Android

    伙计们 我只是尝试在我的笔记本电脑上安装 React Native 我已遵循所有设置说明 但仍然收到这些错误 What went wrong Execution failed for task app compileDebugJavaWit
  • 使用训练有素的 Spark ML 模型提供实时预测[重复]

    这个问题在这里已经有答案了 我们目前正在测试一个基于 Spark 在 Python 中实现 LDA 的预测引擎 https spark apache org docs 2 2 0 ml clustering html latent diri
  • 如何使用堆在线性时间内找到数字的中位数?

    维基百科 http en wikipedia org wiki Heap data structure Heap applications says 选择算法 找到最小值 最大值 最小值和最大值 median 或者 甚至第 k 大元素也可以
  • 在Windows中设置子进程名称?

    我有一个进程 它运行多次子进程 每个子进程都没有 GUI 并且需要为任务管理器的所有子进程设置不同的 名称 和 描述 可以使用Win API吗 我找不到 Windows 系列的解决方案 我查看了 WriteProcessMemory 但它看
  • 使用 JavaScript 的 Selenium Webdriver,如何使用 chrome.exe 的特定路径启动 Chrome?

    我有以下 Javascript 代码 它使用由指定的 Chrome 路径启动 ChromePATH环境变量 let driver await new Builder forBrowser chrome build 如何使用 Chrome 的
  • 在 Python 中打开 URL 并获取最多 X 字节的最佳方法是什么?

    我想让机器人每小时获取一个 URL 但如果网站运营商是恶意的 他可以让他的服务器向我发送一个 1 GB 的文件 有没有好的方法可以将下载限制为 100 KB 并在该限制之后停止 我可以想象从头开始编写自己的连接处理程序 但如果可能的话 我想
  • 设置从磁盘加载的背景图像

    我想在运行时更改 QFrame 背景 但是 我会从磁盘 图像 加载背景 在 QFrame 中设置样式表不起作用 因为图像不在资源中 一种方法是设置 QPushButton 图标 例如 QPixmap img images 01 png ui
  • JMeter:为单个用户触发多个并发 HTTP 请求

    我有一个带有线程组和 Cookie 管理器的 JMeter 负载测试脚本 线程组中的用户首先使用HTTP采样器登录来获取cookie 然后 循环控制器触发交错采样器 该采样器在几个向服务器发出查询的 HTTP 采样器之间交替 现在 我希望交
  • Delphi:更好的设计以避免循环单元引用?

    我在 Delphi 10 中有一个三角形网格结构 出于性能原因 我将网格顶点 三角形面等的数据存储在 TList 的后代中 我让 TList 为列表中的每个成员进行计算 对于这些计算 我需要访问 TMesh 结构的某些字段 因此 在创建 T
  • SVG - 从窗口坐标到ViewBox坐标

    基本上我有一个 svg SecondSVG 到一个 svg FirstSVG 到一个 svg MainSVG 每个 svg 都有自己的 ViewBox 该页面可以由另一个页面加载到屏幕上的任何位置 那么基本上我如何找到 SecondSVG
  • 单击时填充 HTML 下拉列表

    我有一个包含多个 HTML 的页面select下拉菜单 并且需要人口onclick的元素 此填充是通过在单击事件侦听器中使用 AJAX 调用完成的select元素 原因是性能和负载非常关键 因此不能在页面加载时填充它们 另外 设计must使
  • 在默认构造函数或内联初始化变量之间有区别吗? [复制]

    这个问题在这里已经有答案了 我在 Java 中发现了一些相关问题 但没有找到与 C 相关的问题 因此请原谅任何重复的问题 又短又甜 有什么区别 有没有 public static class Foo public static List
  • 与 if 语句中的字符串进行比较不起作用

    我尝试比较从 scanf 和 fscanf 获得的两个字符串 我已经弄清楚每个变量里面的内容是什么 它都显示相同的字符串 但是当我在 if 语句中与这两个字符串进行比较后 它不起作用并执行 else 语句 我的代码有什么问题吗 int ma
  • 如何使 jetty-maven-plugin 部署从存储库检索的战争?

    我正在为一个大型网络项目设置一个集成测试模块 集成测试模块与Web项目本身分离 并且有自己的pom xml 这个想法是使用 maven soapui plugin 发送请求并验证响应 设置soapui插件并不麻烦 但是 我无法弄清楚如何告诉
  • 如何在wpf中的用户控件中使用命令绑定?

    在主窗口中 命令绑定工作正常 在 UserControl 1 中它不起作用 请注意 数据上下文设置正确 作为绑定结果的按钮内容证明了这一点 我并不是试图将用户控件中的命令绑定到主窗口中的命令或任何其他此类技巧 我只是想复制我在 UserCo
  • 使用Git推送部署项目

    是否可以使用部署网站git push 我有预感这与使用有关git钩子 http www git scm com book en v2 Customizing Git Git Hooks执行一个git reset hard在服务器端 但我将如
  • 如何在 PHP 中定义空对象

    使用新数组我这样做 aVal array aVal key1 var1 something aVal key1 var2 something else 对象是否有类似的语法 object oVal oVal gt key1 gt var1
  • MySQL 使用双左连接更新行,限制第一个匹配

    我有三张桌子 SQLFiddle 已创建表 http sqlfiddle com 9 a3dab 橙色文本是我需要通过比较 Products name 与 Filters filter 获得的内容 我发现子字符串匹配可以这样完成 on Pr