Проблема с набором результатов Mysql, если в основном запросе 0 строк, результат из подзапроса - PullRequest
0 голосов
/ 21 июня 2020

У меня есть запрос, который проверяет значение некоторого случая из БД и находит ранг в том, что значение находится в таблице 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 для значения подзапроса 11899 из PREDMETIFView выбор таблицы дает мне результат:

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

Я создал DBfiddle:

Если вы измените значение в строке 98 от 511899 до, например, 899, я получаю строку, но большие значения, чем 500000, это не удается.

1 Ответ

0 голосов
/ 21 июня 2020

Вы можете использовать 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;

Примечание. Этот ответ основан на вашем вопросе и образцах данных. Мне совершенно непонятно, какое отношение имеет запрос к любому из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...