【问题标题】:Creating View for two tables and selecting column5 from table1, or from table2 if table1.column1=table2.column1 and table2.column1 exists为两个表创建视图并从 table1 中选择 column5,如果 table1.column1=table2.column1 和 table2.column1 存在则从 table2 中选择
【发布时间】:2022-01-28 06:35:41
【问题描述】:

我有 2 张桌子,都在 Item 上键入。 Table2 的行是 Table1 中行的子集,基于匹配的 Item 值。所以Table1中可能有行与Table2中的Item不匹配,但Table2中没有行不匹配Table1中的行,按Item。

我需要 Table1 中的几列,包括 Table1.Price。但是,如果 Table1.Item = Table2.Item 和 Table2.Item 存在,我想选择 Table2.Price,而不是 Table1.Price。

我发现我可以使用左连接来组合行,但我不知道如何选择一个价格值,有时从表 1 有时从表 2。

有人可以帮忙吗?

【问题讨论】:

  • 当 Table2 中存在 15 条记录(价格)时,对于 Table1 中的一个关联记录,导出一个值的步骤是什么?
  • 如果您能提供一些示例数据和预期结果,将更容易理解您的需求。
  • 通常你会使用类似isnull(tbl2.Price, tbl1.Price) as Price
  • 请提供minimal reproducible example 示例数据、预期结果和您的尝试。

标签: sql sql-server tsql left-join


【解决方案1】:

因为 Table2 的列在没有匹配的地方会是 NULL,所以你可以使用COALESCE,例如

Select t1.Id, coalesce(t2.Price, t1.Price) Price
from Table1 t1
left join Table2 t2
  on t1.Id = t2.Id

【讨论】:

  • 嗯。?毫升。 M.嗯
  • 嗯 m m mmm/m m mm。嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯。 /m m m../m
  • 考虑到性能影响,您推荐 COALESCE 而不是 ISNULL 很有趣(COALESCE 不会从返回值中删除可空性,并且在子查询的情况下可能会导致执行子查询两次) .还有数据类型问题:ISNULL总是返回第一个参数的数据类型,COALESCE会使用优先级
  • 我更喜欢 COALESCE,因为它是 ANSI 标准并且可以处理任意数量的参数。完整比较:Deciding between COALESCE and ISNULL in SQL Server
猜你喜欢
  • 2014-12-07
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
相关资源
最近更新 更多