sql—mysql结果集有问题,如果主查询上有0行,则从子查询生成结果

7ivaypg9  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(319)

我有一个查询,它检查db中某个case的值,并找到该值所在表中的秩 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 |

子查询值的当前sql 11899PREDMETIFView 表select给出结果:

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    511899

mysql版本是5.6
我做了一把小提琴:
如果你在线上改变值 98511899 例如 899 ,我得到了行,但是值更大 500000 它失败了。

fcg9iug3

fcg9iug31#

你可以用 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;

注:此答案基于您的问题和样本数据。我很不清楚这个问题和这两个问题有什么关系。

相关问题