【问题标题】:SQL select from Table2 if it has a value, else from Table1SQL 如果有值则从表 2 中选择,否则从表 1 中选择
【发布时间】:2015-03-24 17:17:10
【问题描述】:

我有两个包含以下数据的表:

Table1:

PRODUCT | PRICE | NEWPRICE

Table2:

PRODUCT | PRICE | NEWPRICE

Table1 已完成。已创建 Table2 以更新 Table1Table1 包含去年的数据,而 Table2 是最新的。但是Table2 只包含PRODUCT 的今年有NEWPRICE

现在我尝试做的是:

SELECT 
    Table1.PRODUCT, Table1.PRICE, 
    **(IF Table2.NEWPRICE -> select this, ELSE Table1.NEWPRICE)**

有没有办法做到这一点?也许是某种JOIN

PS:我知道这些表的创建并不明智,但我现在必须使用它们,因为我必须继续其他人的工作>。

【问题讨论】:

  • set NEWPRICE = case when t2.newprice is not null then t2.newprice else t1.newprice end
  • table2有新产品吗?

标签: sql select join


【解决方案1】:

我相信这就是你想要的:

SELECT 
  Table1.PRODUCT, Table1.PRICE, COALESCE(Table2.NEWPRICE, Table1.NEWPRICE) AS "New Price"
FROM Table1 LEFT JOIN Table2 ON Table1.Product = Table2.Product

left join 将从 Table1 中获取所有行,并从 Table2 中获取匹配行,如果 Table2 中没有匹配行,则 Table2.NEWPRICE 将为 NULL,COALESCE 将获取Table1.NEWPRICE 值。

这假设所有产品都存在于表 1 中。如果不是这种情况,您可以使用两个表的并集构建所有产品的源,并将其用作两个左连接的左侧,如下所示:

select 
  all_products.product, 
  Table1.PRICE, 
  coalesce(Table2.Newprice, Table1.Newprice) AS "New Price"
from (select product from table1 union all select product from table2) all_products
left join Table1 on all_products.product = Table1.product
left join Table2 on all_products.product = Table2.product

【讨论】:

  • 就像一个魅力,但 NEWPRICE 列现在没有名字。有什么办法定义一个? :) 编辑:你刚刚编辑了这个。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 2018-08-20
  • 1970-01-01
  • 2021-10-13
  • 2023-03-08
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多