sql - 如何修改这个sqlite SQL查询以减少内连接过滤器?

标签 sql sqlite

假设我在 sqlite3 中有这个表name_currency

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

需要从另一个表currency_multiplier检索Y、Z的值。这就是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 的行。内连接过滤太多。如何修改查询来解决问题?欢迎我提出全新的疑问来解决这个问题。

最佳答案

使用左连接代替内连接

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)

关于sql - 如何修改这个sqlite SQL查询以减少内连接过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868401/

相关文章:

java - SQL 脚本转换为 XML 格式

mysql - Delphi Firemonkey XE8 - 如何使用 DataSnap 正确发送/接收图像

sqlite - 在什么情况下应该使用 AUTOINCREMENT 而不是默认的 ROW ID?

java - 从 SQlite 检索 URL 图像

SQL - 在两个日期之间创建自定义日期列表

sql - Azure 数据传输身份列种子跃升 10,000

sql - 按日期分区一段时间 SQL BigQuery

c# - C# 中的 SQL 查询错误 : Using SELECT JOIN WHERE OR

sqlite - 确定 SQLite3 事务是否处于事件状态

perl - 数据库驱动器 :SQLite disconnect