首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >插入不匹配的元组

插入不匹配的元组
EN

Stack Overflow用户
提问于 2020-05-28 12:41:13
回答 1查看 40关注 0票数 0

我有一个包含以下列的表:idstorecategory_idoption_id。此表的内容是通过web-hook从不同服务器上的原始服务器更新的。一旦收到内容,我将需要检查哪些行需要删除,哪些需要插入。

为了简单起见,让我们假设我从web-hook收到的类别和选项id元组是(1,1)和(1,2),并且数据库已经包含(1,1)和(1,3)。因此(1,3)将需要删除,(1,2)将需要插入。

我可以像这样很好地删除:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE FROM store_category_options 
 WHERE store=1 AND (category_id, option_id) NOT IN ((1,1), (1,2));

但是,插入需要两个查询,其中一个用于检索数据库中已有的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT category_id, option_id FROM store_category_options WHERE store=1

然后在MYSQL之外计算出差值后,再插入一次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO store_category_option (category_id, option_id) VALUES (1,2)

我想知道是否有一种方法可以用一个查询而不是两个查询来执行插入。

EN

回答 1

Stack Overflow用户

发布于 2020-05-31 08:49:44

最后我自己弄明白了。首先,我们可以使用WHERE NOT IN将webhook数据转换为可供选择的派生表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 1 as store_category_id, 1 as store_option_id UNION SELECT 1, 2;

在Mysql CLI中,这将生成以下输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------------------+-----------------+
| store_category_id | store_option_id |
+-------------------+-----------------+
|                 1 |               1 |
|                 1 |               2 |
+-------------------+-----------------+
2 rows in set (0.00 sec)

要使用where子句查询此表,需要将其包含在另一个select的子查询中,并为该表指定一个别名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT store_category_id, store_option_id FROM (
  SELECT 1 as store_category_id, 1 as store_option_id 
  UNION SELECT 1, 2
) AS vt WHERE store_option_id = 1;

这将生成以下输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------------------+-----------------+
| store_category_id | store_option_id |
+-------------------+-----------------+
|                 1 |               1 |
+-------------------+-----------------+
1 row in set (0.00 sec)

现在,我们可以使用wherein子句和另一个子查询来选择要插入的行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT store_category_id, store_option_id FROM (
  SELECT 1 as store_category_id, 1 as store_option_id 
  UNION SELECT 1, 2
) AS vt WHERE (category_id, option_id) NOT IN (
  SELECT store_category_id, store_option_id 
  FROM store_category_options
);

结果是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------------------+-----------------+
| store_category_id | store_option_id |
+-------------------+-----------------+
|                 1 |               2 |
+-------------------+-----------------+
1 row in set (0.00 sec)

最后,为了插入我们计算出的行,我们将前面的select语句包含在insert INTO SELECT语句中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO store_category_options 
(store_category_id, store_option_id)
SELECT store_category_id, store_option_id FROM (
    SELECT 1 as store_category_id, 1 as store_option_id 
    UNION SELECT 1, 2
) AS vt WHERE (store_category_id, store_option_id) NOT IN (
    SELECT store_category_id, store_option_id 
    FROM store_category_options
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62064954

复制
相关文章
Access不匹配查询
大家好上节介绍了重复项查询,继续介绍选择查询中的不匹配项查询,不匹配查询也是在查询向导中创建。
无言之月
2020/06/04
2K0
检测到“RuntimeLibrary”的不匹配项
错误是引用的是静态库,但是配置成动态库导致的,只需要修改成”多线程(/MT)“就可 这段错误的意思就是我调用的是静态库,但是我程序是dll动态,但是我这dll调用静态库就调用不成了吗? 解决方案如下
用户3519280
2023/07/08
1.2K0
偏差、方差和数据不匹配
Human-level指人类在目标问题上的error,比如人眼识别猫,人会识别错的error。
Steve Wang
2019/05/26
8990
Codeigniter文件上传类型不匹配错误
Codeigniter的文件上传类方便了我们使用PHP来处理文件上传的操作,使用起来非常简单,如下:
大江小浪
2018/07/24
2.4K0
CA2017:参数计数不匹配
值 规则 ID CA2017 类别 可靠性 修复是中断修复还是非中断修复 非中断 原因 日志记录消息模板中提供的参数数目与命名占位符的数目不匹配。 规则说明 此规则标志记录器调用的消息参数数目不正确。 如何解决冲突 将模板格式的占位符的数量与传递的参数的数目匹配。 何时禁止显示警告 不禁止显示此规则发出的警告。 另请参阅 可靠性规则
用户4268038
2022/02/20
9060
华为OD机试 统计匹配的二元组个数
给定两个数组 A 和 B,若数组 A 的某个元素 A[i] 与数组 B 中的某个元素 B[j] 满足 A[i]==B[j],则寻找到一个匹配的二元组(i,j) ,请统计再这两个数组 A 和 B 中,一共存在多少个这样的二元组。
梦想橡皮擦
2023/04/07
4830
pytorch训练的维度不匹配的问题,解决办法
扩展单张图片维度 import cv2 import torch image = cv2.imread(img_path) image = torch.tensor(image) print(image.size()) img = image.view(1,
AI拉呱
2021/03/03
2K0
【Python】元组 tuple ① ( 元组 tuple 简介 | 元组不可修改 | 元组定义 | 定义只有一个元素的元组 | 元组嵌套 )
列表 List 中的数据是可修改的 , 如果有这样一种场景 , 数据生成后 , 不能修改 , 列表就不适用了 ;
韩曙亮
2023/10/11
2270
error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”的解决方案
error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”(***.obj 中)
AIHGF
2019/02/18
5.7K0
Python元组_python元组的定义方式
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164967.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/19
7120
Java中解决列名不匹配的两种方式
引用它的语句使用 resultMap 属性就行了(注意我们去掉了 resultType 属性)。比如:
用户8983410
2021/10/07
1.2K0
Python元组_python输出元组
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/165086.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/19
1.4K0
检测到“_CRT_STDIO_ISO_WIDE_SPECIFIERS”的不匹配项
libboost_thread-vc142-mt-x64-1_82.lib(thread.obj) : error LNK2038: 检测到“_CRT_STDIO_ISO_WIDE_SPECIFIERS”的不匹配项: 值“0”不匹配值“1”(AcadStr.obj 中) 1> 正在创建库 x64\Release\ArxDbg.lib 和对象 x64\Release\ArxDbg.exp : fatal error LNK1319: 检测到 1 个不匹配项 1>已完成生成项目“ArxDbg.vcxproj”的操作 - 失败。 ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ========== 天天都是这种问题 以Debug或Release方式运行,会出现很多问题,我们逐一解决。
用户3519280
2023/07/08
3450
检测到“_CRT_STDIO_ISO_WIDE_SPECIFIERS”的不匹配项
元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏的角色,列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的,而可变的列表被称为元组。
狼啸风云
2019/01/18
5560
疯狂的元组
先铺垫一个小知识,列表的魔法函数 __iadd__ 相当于列表的 extend 函数,但是会返回扩展后的结果:
somenzz
2022/10/25
4360
元组
元组特点:定义元组使用==小括号==,且==逗号==隔开各个数据,数据可以是不同的数据类型。
生信喵实验柴
2023/09/18
1480
元组
元组
主要是元组的学习: # 编写人:刘钰琢 # 编写日期:2021/1/16 11:00 #不可变序列,可变序列 可变:列表,字典 两次的输出id是一样的 lst=[10,20,30] print(id(lst)) lst.append(300) print(id(lst)) #不可变序列:字符串,元组 两次输出的id是不一样的 s='hello' print(id(s)) s=s+'world' print(id(s)) #元组的创建 t=('python','hello',90)#括号是可以省略不写的
用户8447427
2022/08/18
3010
【Python】认识元组和定义元组
学习元组从元组的应用场景和定义元组以及最重要的元组常见操作方法这3个方面。现只讲解前2个方面,后面的操作方法增删改查一次性讲不完,分几篇文章讲解。
python自学网
2022/04/12
8400
【Python】认识元组和定义元组
Python中的元组
元组(Tuple)用于将多个对象保存到一起。你可以将它们近似地看作列表,但是元组不能提供列表类能够提供给你的广泛的功能。元组的一大特征类似于字符串,它们是不可变的,也就是说,你不能编辑或更改元组。元组是通过特别指定项目来定义的,在指定项目时,你可以给它们加上括号,并在括号内部用逗号进行分隔。元组通常用于保证某一语句或某一用户定义的函数可以安全地采用一组数值,意即元组内的数值不会改变。
benym
2022/07/14
8690
点击加载更多

相似问题

在不同形状的非匹配元组中找到不匹配元组。

12

解包元组时出现元组大小不匹配错误

116

传递元组时类型不匹配

14

元组中的OCaml意外类型不匹配

210

元组的类型不匹配编译错误

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文