iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL同时In俩个字段,In多个字段,Mybatis多个In查询问题,Mysql多个IN查询多出数据问题,Mysql多个IN查询 数据准确问题
  • 144
分享到

MySQL同时In俩个字段,In多个字段,Mybatis多个In查询问题,Mysql多个IN查询多出数据问题,Mysql多个IN查询 数据准确问题

数据库mysqljava 2023-09-02 06:09:53 144人浏览 安东尼
摘要

背景:                 今天产品验收的时候,导入了大量数据;发现造价项目某个查询列表数据多出了几条数据;看了mybatis查询,才发现是同时使用了多个IN查询导致的问题;入参是对象列表,In值是分开循环赋值的,问题就出在这里

背景:        

        今天产品验收的时候,导入了大量数据;发现造价项目某个查询列表数据多出了几条数据;看了mybatis查询,才发现是同时使用了多个IN查询导致的问题;入参是对象列表,In值是分开循环赋值的,问题就出在这里。

        需要根据两个字段去查询多个值,这两个字段值不同的数据,以前一直以为In查询只能查询一个字段的多个值。今天百度发现了一种写法,可以同时In查询多个字段的不同值。

解决办法:

SELECT * FROM more_in WHERE (lmm_id, item_id, `name`) IN ((1,2, '工料机1'),(2,2, '工料机2'),(3,3, ''));


脚本实例:

-- ------------------------------ Table structure for more_in-- ----------------------------DROP TABLE IF EXISTS `more_in`;CREATE TABLE `more_in`  (  `id` int NOT NULL AUTO_INCREMENT,  `lmm_id` int NULL DEFAULT NULL,  `item_id` int NULL DEFAULT NULL,  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,  `detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of more_in-- ----------------------------INSERT INTO `more_in` VALUES (1, 1, 2, '工料机1', NULL);INSERT INTO `more_in` VALUES (2, 2, 2, '工料机2', NULL);INSERT INTO `more_in` VALUES (3, 3, 3, '工料机3', NULL);INSERT INTO `more_in` VALUES (4, 4, 3, '工料机4', NULL);INSERT INTO `more_in` VALUES (5, 5, 1, '工料机5', NULL);INSERT INTO `more_in` VALUES (6, 2, 3, '工料机6', NULL);

查询需要的入参列表数据,如下:

-- lmm_id,  item_id

-- 1,2
-- 2,2
-- 3,3

错误写法:

通过如下语句查询,会多出ID为6的数据:
SELECT * FROM more_in a
WHERE a.lmm_id IN (1,2,3) AND a.item_id IN (2,2,3);


正确写法:

IN同时可以In多个字段,In的左侧两个字段,右侧必须俩字段,左右两侧能对应上:

SELECT * FROM more_in WHERE (lmm_id, item_id) IN ((1,2),(2,2),(3,3));

MyBatis XML 写法:

//mapper接口定义List> getResult(@Param("list") List> list);
select * from demo t where (t.id, t.name) in(#{item.id},#{item.name})

其他:

List getDiscrepancyList(@Param("data") TbProjectDTO dto);

如果本篇文章对你有帮助的话,很高兴能够帮助上你。

当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。

来源地址:https://blog.csdn.net/chenthe1/article/details/130692027

您可能感兴趣的文档:

--结束END--

本文标题: MySQL同时In俩个字段,In多个字段,Mybatis多个In查询问题,Mysql多个IN查询多出数据问题,Mysql多个IN查询 数据准确问题

本文链接: https://www.lsjlt.com/news/390068.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作