Как изменить этот SQL-запрос sqlite, чтобы фильтр внутреннего объединения был меньше - PullRequest
0 голосов
/ 18 октября 2018

Предположим, у меня есть эта таблица name_currency в sqlite3.

name,   currency,   price
AA,     SGD,        1
BB,     USD,        2
CC,     EUR,        3

Мне нужно обработать цену таким образом.

if currency == "SGD", price = price*2 
if currency == "USD", price = price*Y
if currency == "EUR", price = price*Z

Значения Y, Z должныбыть извлеченным из другой таблицы currency_multiplier.Вот как выглядит currency_multiplier.

currency,   rate
SGDUSD,     3    #value of Y
SGDEUR,     4    #value of Z

Желаемая выходная таблица будет выглядеть так после обработки столбца цены;

name,   currency,   price
AA,     SGD,        2
BB,     USD,        6
CC,     EUR,        12

Вот запрос, который я написал для решения этой проблемы.

SELECT name_currency.name, 
       name_currency.currency, 
       name_currency.dividend_yield*currency_multiplier.rate as price, 
from name_currency
INNER JOIN currency_multiplier
    on name_currency.currency = substr(currency_multiplier.currency,4,3)

Вывод запроса, который я написал, выглядит следующим образом:

name,   currency,   price
BB,     USD,        6
CC,     EUR,        12

Отсутствует одна из строк с валютой SGD.Внутреннее соединение слишком сильно отфильтровано.Как я могу изменить запрос для решения проблемы?Я приветствую совершенно новые запросы для решения этой проблемы.

1 Ответ

0 голосов
/ 18 октября 2018

Использовать левое соединение вместо внутреннего соединения

SELECT name_currency.name, 
       name_currency.currency, 
       case when currency_multiplier.rate is null then  name_currency.dividend_yield*2 else name_currency.dividend_yield*currency_multiplier.rate end as price, 
from name_currency
left JOIN currency_multiplier
    on name_currency.currency = substr(currency_multiplier.currency,4,3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...