我有一个查询,它从DB中检查某些情况的值,并找到值驻留在表BOD中的级别
SELECT DISTINCT bod_bod, (SELECT REPLACE(predf_VPS,'.','') as vps FROM PREDMETIFView WHERE
predf_nas_br=?) as vps_baza FROM BOD WHERE (SELECT REPLACE(predf_VPS,'.','') as vps
FROM PREDMETIFView WHERE predf_nas_br=?) BETWEEN bod_od AND bod_do ORDER BY bod_bod ASC
LIMIT 1表表BOD是:
| bod_id | bod_od | bod_do | bod_bod | bod_dodan |
| ------ | --------- | --------- | ------- | ------------------- |
| 0 | 0.00 | 2500.00 | 25 | 0000-00-00 00:00:00 |
| 1 | 2500.01 | 5000.00 | 50 | 0000-00-00 00:00:00 |
| 2 | 5000.01 | 10000.00 | 75 | 0000-00-00 00:00:00 |
| 3 | 10000.01 | 100000.00 | 100 | 2020-04-10 13:06:53 |
| 4 | 100000.01 | 250000.00 | 250 | 0000-00-00 00:00:00 |
| 5 | 250000.01 | 500000.00 | 500 | 2020-04-08 23:04:30 |当前对来自11899表的子查询值PREDMETIFView的SQL给出了结果:
bod_bod vps_baza
100 11899因为数字11899在10000.01和100000.00之间。
稍后,我在PHP中用这个数字做了一些计算。
,但问题是:当数字大于500000.00时,查询的结果集为0行(因为没有匹配的秩)。但是,我仍然需要这个数字vps_baza来进行PHP的计算。
因此,是否有一种方法可以说,如果没有排序匹配,它仍然生成一个结果行(不改变表BOD),例如,对于vps_baza 511899值:
bod_bod vps_baza
null 511899MySQL版本为5.6
我做了一个DBfiddle:
如果您将98上的值从511899更改为899,我将得到行,但更大的值则会导致500000失败。
发布于 2020-06-20 23:48:20
您可以使用left join
select x.vps_baza, . . .
from (select 11899 as vps_baza) x left join
bods b
on x.vps.baza between b.bod_od and b.bod_do;注意:这个答案是基于你的问题和样本数据。我很不清楚这个查询与这两个问题之间有什么关系。
https://stackoverflow.com/questions/62492874
复制相似问题