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

这篇具有很好参考价值的文章主要介绍了MySQL同时In俩个字段,In多个字段,Mybatis多个In查询问题,Mysql多个IN查询多出数据问题,Mysql多个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 两个字段,Mysql,数据库,mysql,java

正确写法:

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

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

in 两个字段,Mysql,数据库,mysql,java

MyBatis XML 写法:

//mapper接口定义
List<Map<String, Object>> getResult(@Param("list") List<Map<String, String>> list);
<select id="getResult" resultType="java.util.HashMap">
	select * from demo t where (t.id, t.name) in
	<foreach collection="list" item="item" open="(" close=")" separator=",">
		(#{item.id},#{item.name})
	</foreach>
</select>

其他:

/**
  * 获取相同item_code相关相同工机下含量不一致的item_code列表
  * @return
  **/
List<TbProjectItemDTO> getDiscrepancyList(@Param("data") TbProjectDTO dto);

<select id="getDiscrepancyList" resultType="org.dto.TbProjectItemDTO">
        SELECT
            tl.lmm_id, cq.item_code
        FROM `tb_project_lmm` AS tl
            LEFT JOIN `tb_project` AS cq ON cq.project_id= tl.project_id
                AND cq.state_deleted = 0
        WHERE
            tl.state_deleted = 0
        <if test="data.projectId != '' and data.projectId != null">
            AND tl.`project_id` = #{data.projectId}
        </if>
        GROUP BY cq.`item_code`, tl.lmm_id HAVING COUNT(DISTINCT IF(tl.`quantity` IS NULL,0,tl.`quantity`)) &gt; 1
</select>

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

当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。文章来源地址https://www.toymoban.com/news/detail-641056.html

到了这里,关于MySQL同时In俩个字段,In多个字段,Mybatis多个In查询问题,Mysql多个IN查询多出数据问题,Mysql多个IN查询 数据准确问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unknown column ‘字段名‘ in ‘field list‘ 错误解决办法——mybatis常见问题汇总

    使用mybatis时我们经常会碰到如下错误 出现这种情况可能是 1、sql中的字段和数据库的字段对不上,或者是sql中的字段和实体类的字段对不上,需要检查数据库字段和实体类字段 2、可能是#{isDel} 中的 #{} 忘了写了。 总之,多检查几遍

    2024年02月10日
    浏览(50)
  • mysql对以逗号分隔的字段内容进行查询——find_in_set函数或locate函数

    使用mysql时,有可能一个字段代表一个集合,如果将这个集合单独抽成一张表又不值当的,这个时候我们存储时,可以选择用逗号将数据分隔开(只能用英文的逗号),如图所示: 做查询时怎么查呢? 假如说给一个数据作为查询条件,判断该字段是否存在,应该怎么查呢?

    2024年02月09日
    浏览(52)
  • Mysql 字段模糊查询,在页面中输入%查询全部的问题处理

    一、背景   测试小妹闲着无聊,针对某一个查询项进行“ % ”测试,正常查询效果应该是返回空数据,但是却查出所有的数据。 二、解决方案 1、在使用mybatis的模糊查询时,有两个特殊符号需要注意: %(百分号):相当于任意多个字符; _(下划线):相当于任意的单个字符;

    2024年02月01日
    浏览(38)
  • mysql对以逗号分隔的字段内容进行查询——find_in_set函数或locate函数或position函数

    使用mysql时,有可能一个字段代表一个集合,如果将这个集合单独抽成一张表又不值当的,这个时候我们存储时,可以选择用逗号将数据分隔开(只能用英文的逗号),如图所示: 做查询时怎么查呢? 假如说给一个数据作为查询条件,判断该字段是否存在,应该怎么查呢?

    2024年01月15日
    浏览(52)
  • 【MyBatis】拦截查询结果同时动态替换

    项目中需要用到响应时替换某些字段的某些值。

    2024年02月04日
    浏览(45)
  • Mybatis分页查询同时返回总数和数据

    我们在使用Mybatis分页查询数据列表时,在用户的一个请求中常常需要同时返回当前页的列表数据以及满足条件的数据总条数用于分页。 1)执行两次SQL,一次查列表,一次查总数       这种方法最简单,也最容易实现。 2)分页插件PageHelper       另一种常用的方式就是使用

    2024年02月14日
    浏览(33)
  • SQL 查询中按多个字段排序的方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在 SQL 查询中,经常需要按多个字段对结果进行排序。本文将介绍如何使用 SQL 查询语句按多个字段进行排序,提

    2024年02月12日
    浏览(35)
  • Springboot Mybatis 自定义顺序排序查询,指定某个字段

    与本文无关  \\\"我进去了\\\"  ....... 今天要讲些什么?  其实很简单,就是查询数据的时候,想根据自己指定的字段的自定义顺序,做排序查询数据。 本篇文章会讲到的几个点 : 1. 单纯sql 怎么实现 排序 2. 单纯sql 怎么实现 自定义排序 3. 结合java ,怎么排序 4. 结合mybatis 怎么把

    2024年02月08日
    浏览(45)
  • es查询nested字段类型数组长度来判断是否包含多个值

    使用es时经常会碰到查询数组格式的字段是否有多个值的情况,总结一下。 一、字段类型为keywork时 当字段类型为keyword时(创建索引后,添加的第一条数据id字段格式为数组格式,便会导致后续的数据都是数组),查询id字段有多值时用以下查询语句: 二、字段类型为nested类型时

    2024年02月11日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包