select case when(t1.business_transfer=‘source’)then 0 else t1.settlement_tyy_cash_amount end as tyy from t_settlement_waybill t1 where waybill_sn in (‘2025010700001’);
select case when(t1.business_transfer=‘source’)then (t1.settlement_tyy_cash_amount=‘0’) else t1.settlement_tyy_cash_amount end as tyy from t_settlement_waybill t1 where waybill_sn in (‘2025010700001’);
为什么这两个SQL执行结果不一致
这两个SQL查询的主要差异在于CASE
语句中的处理方式。
第一个查询:
SELECT
CASE
WHEN t1.business_transfer='source' THEN 0
ELSE t1.settlement_tyy_cash_amount
END as tyy
FROM
t_settlement_waybill t1
WHERE
waybill_sn in ('2025010700001');
在这个查询中,当t1.business_transfer
的值为’source’时,tyy
的值会被设置为0。否则,它会使用t1.settlement_tyy_cash_amount
的当前值。这里并没有尝试将t1.settlement_tyy_cash_amount
设置为字符串’0’,只是进行了比较和赋值。
第二个查询:
SELECT
CASE
WHEN t1.business_transfer='source' THEN (t1.settlement_tyy_cash_amount='0')
ELSE t1.settlement_tyy_cash_amount
END as tyy
FROM
t_settlement_waybill t1
WHERE
waybill_sn in ('2025010700001');
在这个查询中,当t1.business_transfer
的值为’source’时,tyy
的值会被设置为一个布尔值,表示t1.settlement_tyy_cash_amount
是否等于字符串’0’。如果相等,它会返回TRUE
(或相应的布尔值),否则它会返回t1.settlement_tyy_cash_amount
的原始值。这意味着结果可能是布尔值或数字,取决于t1.settlement_tyy_cash_amount
的值。这也可能导致数据类型的不一致,这在某些数据库系统中可能会引起错误或不期望的行为。此外,在许多数据库系统中,尝试将布尔值作为数字处理可能会导致意外的结果。这可能是两个查询结果不一致的原因。
当t1.settlement_tyy_cash_amount的原始值分别为0,10时,对应的第二条SQL执行结果是什么?
SELECT
CASE
WHEN t1.business_transfer='source' THEN (t1.settlement_tyy_cash_amount='0')
ELSE t1.settlement_tyy_cash_amount
END as tyy
FROM
t_settlement_waybill t1
WHERE
waybill_sn in ('2025010700001');
在这个查询中,当t1.business_transfer
为 ‘source’ 时,tyy
的值将根据t1.settlement_tyy_cash_amount='0'
的结果来决定。这个表达式会比较t1.settlement_tyy_cash_amount
是否等于字符串’0’。
如果 t1.settlement_tyy_cash_amount
的原始值为0:
t1.business_transfer
等于’source’时:(t1.settlement_tyy_cash_amount = '0')
结果为TRUE
(通常在某些数据库中为1)。
t1.business_transfer
不等于’source’时:tyy
的值为0(因为直接返回t1.settlement_tyy_cash_amount
),结果为0。
如果 t1.settlement_tyy_cash_amount
的原始值为10:
t1.business_transfer
等于’source’时:(t1.settlement_tyy_cash_amount = '0')
结果为FALSE
(通常在某些数据库中为0)。
t1.business_transfer
不等于’source’时:tyy
的值为10(返回原始值)。
总结:
- 当
t1.settlement_tyy_cash_amount
为 0,且t1.business_transfer
为’source’时,tyy的值为TRUE(或1)。 - 当
t1.settlement_tyy_cash_amount
为 0,且t1.business_transfer
非’source’时,tyy的值为0。 - 当
t1.settlement_tyy_cash_amount
为 10,且t1.business_transfer
为’source’时,tyy的值为FALSE(或0)。 - 当
t1.settlement_tyy_cash_amount
为 10,且t1.business_transfer
非’source’时,tyy的值为10。
idea free版
https://pan.quark.cn/s/dd7db30d835f
free 🎬大全
https://kdocs.cn/l/cqhxNU9I2lLD
12306买票科技
https://pan.quark.cn/s/45f6bf9be1b3