MySQL中 != 无法查出NULL值

博客指出NULL值不能使用比较符号进行比较,因此通过比较符号无法查出包含NULL的记录,这是信息技术中数据库查询相关的重要特性。

由于NULL值无法使用比较符号进行比较,所以,通过比较符号无法查出NULL 的记录

<!-- 主查询:只查询主表信息 --> <select id="queryPurchaseOrderPage" resultType="com.hvlink.entity.dto.order.PurchaseOrderMainDTO"> SELECT m.id, m.company_code, m.purchase_order_no, m.publish_date, s.supplier_code, s.supplier_name, f.factory_code, f.factory_name, w.warehouse_code, w.warehouse_name, m.serial_version_num, m.order_type FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY purchase_order_no, company_code ORDER BY serial_version_num DESC) as rn FROM tb_order_main WHERE is_deleted = 0 ) m LEFT JOIN tm_supplier s ON m.supplier_code = s.supplier_code AND m.company_code = s.company_code LEFT JOIN tm_factory f ON m.factory_code = f.factory_code AND m.company_code = f.company_code LEFT JOIN tm_warehouse w ON m.warehouse_code = w.warehouse_code AND m.company_code = w.company_code <where> m.rn = 1 <!-- 只取每个订单的最新版本 --> <!-- 优化后的模糊匹配组 --> <if test="param.supplierName != null and param.supplierName != '' or param.supplierCode != null and param.supplierCode != '' or param.factoryName != null and param.factoryName != '' or param.factoryCode != null and param.factoryCode != '' or param.warehouseName != null and param.warehouseName != '' or param.warehouseCode != null and param.warehouseCode != ''"> AND ( <trim prefixOverrides="OR"> <!-- 供应商条件 --> <if test="param.supplierName != null and param.supplierName != ''"> OR s.supplier_name LIKE '%' + #{param.supplierName} + '%' </if> <if test="param.supplierCode != null and param.supplierCode != ''"> OR s.supplier_code LIKE '%' + #{param.supplierCode} + '%' </if> <!-- 工厂条件 --> <if test="param.factoryName != null and param.factoryName != ''"> OR f.factory_name LIKE '%' + #{param.factoryName} + '%' </if> <if test="param.factoryCode != null and param.factoryCode != ''"> OR f.factory_code LIKE '%' + #{param.factoryCode} + '%' </if> <!-- 仓库条件 --> <if test="param.warehouseName != null and param.warehouseName != ''"> OR w.warehouse_name LIKE '%' + #{param.warehouseName} + '%' </if> <if test="param.warehouseCode != null and param.warehouseCode != ''"> OR w.warehouse_code LIKE '%' + #{param.warehouseCode} + '%' </if> </trim> ) </if> <!-- 订单号模糊查询 --> <if test="param.purchaseOrderNo != null and param.purchaseOrderNo != ''"> AND m.purchase_order_no LIKE '%' + #{param.purchaseOrderNo} + '%' </if> <if test="param.startDate != null"> AND m.publish_date >= #{param.startDate} </if> <if test="param.endDate != null"> AND m.publish_date <= #{param.endDate} </if> <!-- 订单类型 --> <if test="param.orderType != null"> AND m.order_type = #{param.orderType} </if> <!-- 明细字段关联查询 - 使用EXISTS优化性能 --> <if test="param.partCode != null and param.partCode != ''"> AND EXISTS ( SELECT 1 FROM tb_order_detail d WHERE d.purchase_order_no = m.purchase_order_no AND d.company_code = m.company_code AND d.serial_version_num = m.serial_version_num AND d.part_code LIKE '%' + #{param.partCode} + '%' ) </if> <if test="param.partDesc != null and param.partDesc != ''"> AND EXISTS ( SELECT 1 FROM tb_order_detail d WHERE d.purchase_order_no = m.purchase_order_no AND d.company_code = m.company_code AND d.serial_version_num = m.serial_version_num AND d.part_desc LIKE '%' + #{param.partDesc} + '%' ) </if> <if test="param.frequency != null and param.frequency != ''"> AND EXISTS ( SELECT 1 FROM tb_order_detail d WHERE d.purchase_order_no = m.purchase_order_no AND d.company_code = m.company_code AND d.serial_version_num = m.serial_version_num AND d.frequency = #{param.frequency} ) </if> </where> ORDER BY s.supplier_code DESC, m.purchase_order_no DESC </select> <select id="selectLatestByOrderIds" resultType="com.hvlink.entity.dto.order.PurchaseOrderMainDTO"> SELECT m.id, m.company_code, m.purchase_order_no, m.publish_date, s.supplier_code, s.supplier_name, f.factory_code, f.factory_name, w.warehouse_code, w.warehouse_name, m.serial_version_num, m.order_type FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY purchase_order_no, company_code ORDER BY serial_version_num DESC) as rn FROM tb_order_main WHERE is_deleted = 0 AND id IN <foreach collection="orderIds" item="id" open="(" close=")" separator=","> #{id} </foreach> ) m LEFT JOIN tm_supplier s ON m.supplier_code = s.supplier_code AND m.company_code = s.company_code LEFT JOIN tm_factory f ON m.factory_code = f.factory_code AND m.company_code = f.company_code LEFT JOIN tm_warehouse w ON m.warehouse_code = w.warehouse_code AND m.company_code = w.company_code WHERE m.rn = 1 ORDER BY m.create_time DESC </select> 进行性能优化,并帮我检查是否有错误
09-25
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hvlink.mapper.asn.AsnMainMapper"> <!-- ASN主表分页查询 --> <select id="queryAsnPage" resultType="com.hvlink.entity.dto.asn.AsnMainDTO"> SELECT m.id, m.asn_no, m.status, m.is_fully_shipping, m.create_time, m.release_date, m.factory_code, f.factory_name, m.warehouse_code, w.warehouse_name, m.shipper_id, s.shipper_name, s.supplier_code, sup.supplier_name FROM ( -- 主表:每个 asn_no 只保留最新一条记录 SELECT *, ROW_NUMBER() OVER (PARTITION BY asn_no ORDER BY create_time DESC, id DESC) AS rn FROM tb_asn_main WHERE is_deleted = 0 ) m LEFT JOIN ( -- 预聚合工厂表:确保 factory_code 唯一 SELECT factory_code, MAX(factory_name) AS factory_name FROM tm_factory GROUP BY factory_code ) f ON m.factory_code = f.factory_code LEFT JOIN ( -- 预聚合仓库表 SELECT warehouse_code, MAX(warehouse_name) AS warehouse_name FROM tm_warehouse GROUP BY warehouse_code ) w ON m.warehouse_code = w.warehouse_code LEFT JOIN ( -- 发货方表 + 关联供应商 code SELECT s.id, MAX(s.shipper_name) AS shipper_name, MAX(s.supplier_code) AS supplier_code FROM tm_shipper s GROUP BY s.id ) s ON m.shipper_id = s.id LEFT JOIN ( -- 供应商表去重 SELECT supplier_code, MAX(supplier_name) AS supplier_name FROM tm_supplier GROUP BY supplier_code ) sup ON s.supplier_code = sup.supplier_code WHERE m.rn = 1 -- 每个 asn_no 最新一条 <!-- 工厂条件 --> <if test="param.factoryCode != null and param.factoryCode != ''"> AND m.factory_code LIKE CONCAT('%', #{param.factoryCode}, '%') </if> <!-- 仓库条件 --> <if test="param.warehouseCode != null and param.warehouseCode != ''"> AND m.warehouse_code LIKE CONCAT('%', #{param.warehouseCode}, '%') </if> <!-- ASN号条件 --> <if test="param.asnNo != null and param.asnNo != ''"> AND m.asn_no LIKE CONCAT('%', #{param.asnNo}, '%') </if> <!-- 订单号条件 --> <if test="param.orderNo != null and param.orderNo != ''"> AND EXISTS ( SELECT 1 FROM tb_asn_detail ad WHERE ad.asn_no = m.asn_no AND ad.is_deleted = 0 AND ad.order_no LIKE CONCAT('%', #{param.orderNo}, '%') ) </if> <!-- 零件号条件 --> <if test="param.partCode != null and param.partCode != ''"> AND EXISTS ( SELECT 1 FROM tb_asn_detail ad WHERE ad.asn_no = m.asn_no AND ad.is_deleted = 0 AND ad.part_code LIKE CONCAT('%', #{param.partCode}, '%') ) </if> <!-- 零件描述条件 --> <if test="param.partDesc != null and param.partDesc != ''"> AND EXISTS ( SELECT 1 FROM tb_asn_detail ad WHERE ad.asn_no = m.asn_no AND ad.is_deleted = 0 AND ad.part_desc LIKE CONCAT('%', #{param.partDesc}, '%') ) </if> <!-- 发货方名称 --> <if test="param.shipperName != null and param.shipperName != ''"> AND s.shipper_name LIKE CONCAT('%', #{param.shipperName}, '%') </if> <!-- 状态 --> <if test="param.status != null and param.status != ''"> AND m.status = #{param.status} </if> <!-- 供应商编码 --> <if test="param.supplierCode != null and param.supplierCode != ''"> AND sup.supplier_code LIKE CONCAT('%', #{param.supplierCode}, '%') </if> <!-- 供应商名称 --> <if test="param.supplierName != null and param.supplierName != ''"> AND sup.supplier_name LIKE CONCAT('%', #{param.supplierName}, '%') </if> <!-- 创建时间范围 --> <if test="param.createStartDate != null"> AND m.create_time >= #{param.createStartDate} </if> <if test="param.createEndDate != null"> AND m.create_time <= #{param.createEndDate} </if> <!-- 发布日期范围 --> <if test="param.releaseStartDate != null"> AND m.release_date >= #{param.releaseStartDate} </if> <if test="param.releaseEndDate != null"> AND m.release_date <= #{param.releaseEndDate} </if> ORDER BY m.id ASC </select> <!-- 逻辑删除 --> <update id="logicalDeleteByAsnNo"> UPDATE tb_asn_main SET deleted = #{deletedCode} WHERE asn_no = #{asnNo} </update> <!-- 发布状态 --> <update id ="updateReleaseStatus"> UPDATE tb_asn_main SET release_status = #{param.releaseStatus},release_date = #{param.releaseDate} WHERE id = #{param.id} </update>> </mapper> The content of element type "mapper" must match "(cache-reflcachelresultiap*|parameterMap*|sql*linsert*lupdate*ldelete*jselect*)+"
09-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值