SQLite从tbl2(或tlb1,如果不存在)中选择值

SQLite从tbl2(或tlb1,如果不存在)中选择值,sqlite,Sqlite,我有两个表tbl1和tbl2,它们都有行id和price,其中tbl1包含许多记录,而tbl2只包含少数记录 我想从tbl1中选择所有条目,但如果tbl2中存在price数据,我想用tbl2中的数据替换price id price 2 99.99 到目前为止,我得到了一个不起作用的查询: SELECT p.id, CASE p.id WHEN p.id IN ( SELECT id FROM tbl2

我有两个表
tbl1
tbl2
,它们都有行
id
price
,其中
tbl1
包含许多记录,而
tbl2
只包含少数记录

我想从
tbl1
中选择所有条目,但如果
tbl2
中存在
price
数据,我想用
tbl2
中的数据替换
price

id  price
2   99.99
到目前为止,我得到了一个不起作用的查询:

SELECT p.id,
       CASE p.id WHEN p.id IN (
                SELECT id
                  FROM tbl2
            )
       THEN o.price
       ELSE p.price END AS 'price'
  FROM tbl1 p
       LEFT JOIN tbl2 o ON p.id = o.id
样本
tbl1

id  price
1   1.23
2   4.56
3   7.89
示例
tbl2

id  price
2   99.99
预期的查询结果

id  price
1   1.23
2   99.99    <--- entry from tbl2
3   7.89   
id价格
1   1.23

2 99.99只需使用
COALESCE
选择正确的价格:

SELECT
    p.id,
    COALESCE(o.price, p.price) price
FROM tbl1 p
LEFT JOIN tbl2 o
    ON p.id = o.id;


这里的逻辑是我们使用第二个表中的
价格
,假设它存在于给定的
id
。如果它不存在,那么我们返回到使用第一个表中的
价格

只需使用
合并
选择正确的价格:

SELECT
    p.id,
    COALESCE(o.price, p.price) price
FROM tbl1 p
LEFT JOIN tbl2 o
    ON p.id = o.id;


这里的逻辑是我们使用第二个表中的
价格
,假设它存在于给定的
id
。如果它不存在,那么我们回到使用第一个表中的
价格

这太棒了!非常感谢你,这很有魅力。我会在至少10分钟后接受你的回答。这太棒了,提姆!非常感谢你,这很有魅力。我会在至少10分钟后接受你的回答