【无标题】上午修复了一个小bug浪费了半天(3个技能点都不熟练)

		<if test="query.payStatus != null and query.payStatus != ''">
			and pay_status = #{query.payStatus}
		</if>  payStatus时integetr类型  query.payStatus为0时无法进入这个条件 但是等于1时可以 

你遇到的问题是由于 query.payStatus0 时的条件判断没有通过,这是因为在 Java 中,0 是一个合法的整数值,并且 0 也会被认为是“非空”或“非空字符串”。但在你的条件中,query.payStatus0 时,query.payStatus != null and query.payStatus != '' 的逻辑判断未能正确识别 0

解决方法

可以通过以下方式解决这个问题,确保 payStatus0 时也能正确匹配条件:

方法 1:明确判断 query.payStatus 是否为 0 或非空

修改条件语句如下:

<if test="query.payStatus != null and (query.payStatus != '' or query.payStatus == 0)">
    and pay_status = #{query.payStatus}
</if>

这个条件明确地允许 query.payStatus0 时进入条件判断。

方法 2:检查是否为 null 或直接比较

可以直接判断 query.payStatus 是否为 null,然后对其进行判断:

<if test="query.payStatus != null">
    and pay_status = #{query.payStatus}
</if>

这种方式略微简化了逻辑,但会在 query.payStatus 为空字符串时跳过条件。

方法 3:转换 payStatus 类型为字符串

如果要处理包括字符串比较的情况,可以先将 payStatus 转为字符串:

<if test="query.payStatus != null and query.payStatus.toString() != ''">
    and pay_status = #{query.payStatus}
</if>

这种方式可以处理 payStatus0 或其他整数时的情况。

总结

确保条件语句能正确判断 payStatus0 的情况,这样可以避免逻辑判断上的遗漏。通过增强判断条件或明确条件逻辑,可以解决这个问题。

– 用is not null
view_iocar_pregister_car_goods_pay.pay_status is not null

在使用 SQL 的 LEFT JOIN 时,左表中的所有记录都会被保留,无论右表中是否有匹配的记录。当左表中的一条记录在右表中没有找到匹配时,右表中对应的字段值就会显示为 NULL

出现 NULL 的情况

LEFT JOIN 的基本语法如下:

SELECT a.column1, b.column2
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id;

在这个例子中:

  • 左表 (table_a)table_a
  • 右表 (table_b)table_b
  • a.id = b.a_id 是连接条件。

出现 NULL 的情况

  • 如果 table_a 中的一条记录的 idtable_b 中没有对应的 a_id,那么这条记录仍然会出现在结果中,但 table_b 中的所有列都将显示为 NULL

示例

假设有两个表:

  • table_a:

    id | name
    1  | Alice
    2  | Bob
    3  | Charlie
    
  • table_b:

    a_id | score
    1    | 85
    3    | 90
    

使用 LEFT JOIN

SELECT a.id, a.name, b.score
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id;

结果将是:

id | name    | score
1  | Alice   | 85
2  | Bob     | NULL
3  | Charlie | 90

在这个结果中,Bobscore 显示为 NULL,因为在 table_b 中没有 a_id = 2 的匹配记录。

总结

LEFT JOIN 中,如果左表中的记录没有在右表中找到匹配,右表对应的字段就会显示为 NULL。这通常用于确保左表中的所有记录都保留,即使右表中没有匹配的记录。

在 SQL 中,GROUP BY 子句用于根据一个或多个列对查询结果进行分组。常用于统计和聚合操作,例如计算每组中的数量、总和、平均值等。GROUP BY 子句通常与聚合函数(如 COUNT, SUM, AVG, MAX, MIN 等)一起使用。

基本语法

SELECT column1, column2, AGGREGATE_FUNCTION(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2;
  • column1, column2: 这是你根据这些列分组的字段。
  • AGGREGATE_FUNCTION(column3): 这是聚合函数,对分组后的数据进行统计或其他计算。
  • WHERE 子句: 用于过滤数据,在分组前筛选满足条件的记录。
  • GROUP BY 子句: 指定要分组的列。

示例 1:按列分组计算数量

假设有一个名为 orders 的表:

order_id | customer_id | amount
1        | 101         | 250
2        | 102         | 300
3        | 101         | 450
4        | 103         | 150
5        | 102         | 200

如果想要统计每个客户的订单数量,可以使用 GROUP BY 进行分组:

SELECT customer_id, COUNT(order_id) AS order_count
FROM orders
GROUP BY customer_id;

结果:

customer_id | order_count
101         | 2
102         | 2
103         | 1

示例 2:按列分组计算总和

你还可以使用 SUM 聚合函数计算每个客户的订单总金额:

SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;

结果:

customer_id | total_amount
101         | 700
102         | 500
103         | 150

示例 3:按多个列分组

假设在 orders 表中,还有一个 order_date 列,你想按客户和日期进行分组,计算每个客户在每一天的订单总金额:

SELECT customer_id, order_date, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id, order_date;

这样可以按客户和日期进行分组。

示例 4:使用 HAVING 过滤分组结果

HAVING 子句用于过滤分组后的结果。与 WHERE 不同,HAVING 是在分组之后执行的,可以对聚合结果进行过滤。

例如,只显示订单总金额超过 400 的客户:

SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 400;

结果:

customer_id | total_amount
101         | 700

总结

  • GROUP BY 用于根据一个或多个列对数据进行分组。
  • 常与聚合函数一起使用,以计算每组的统计信息。
  • 如果需要过滤分组后的结果,可以使用 HAVING 子句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值