【问题标题】:Updating table in Schema 1 based on values of few columns of a table in Schema 2根据 Schema 2 中表的几列的值更新 Schema 1 中的表
【发布时间】:2020-05-23 17:16:22
【问题描述】:

我会尽力解释问题所在。 所以我在 2 个不同的 Schema 中有 2 个表,两者中的列都很少,而且我只拥有 1 个模式。

我需要做的是使用来自模式 2 中表 B 的字段之一的值更新模式 1 中的表 A。 我只需要更新此表中的几行 问题在于当表 A 被填充时,表 B 中的数据还没有准备好数据。 如果可能,我正在尝试以编程方式。

由于它们处于不同的模式并且更新大小相对小于 A 的表大小,所以最好的方法是什么? 样本数据 **

Table A
orderNum | orderNumInternal | validity                | averageSales   |type
1000     |  5636            | 2020-06-30 00:00:00.000 |  NULL          |valid
Table B
orderNum | orderNumInternal | validity                | averageSales
1000     |  5636            | 2020-06-30 00:00:00.000 |  65

** 在这里,只要表 A 中的类型有效并且表 B 中的前 3 列匹配,我就需要使用表 B 中的 averageSales 值更新表 A

表 A 是在一夜之间创建的,而我无法控制表 B 中的数据何时可用

【问题讨论】:

  • 样本数据和期望的结果会很有帮助。 “表 B 尚未准备好数据”是什么意思?
  • @GordonLinoff 我已经更新了这个问题,如果它看起来仍然令人困惑,请告诉我?

标签: java sql sql-server hibernate


【解决方案1】:

这不是简单的UPDATEJOIN 吗?

UPDATE A
SET averageSales = B.averageSales
FROM Schema1.TableA A
     JOIN Schema2.TableB B ON A.orderNum = B.orderNum
WHERE A.averageSales IS NULL; --Unsure if this WHERE is needed

【讨论】:

  • 好吧,我可以这样做,但是跨模式连接不会影响性能吗?此外,orderNum 上的连接可能会变成一个巨大的列表,但并非所有这些都是有效的,因为我需要将“类型”也考虑在内以进行更新
  • 为什么跨模式加入会对性能产生任何影响,@PeeyushPathak?它们仍在同一个数据库中。在您的示例中,type 不在TableB 中,并且您给了我一个示例来基于...
  • 数据库查询并不是我的强项,所以我有点不愿意使用模式间连接,但现在它对我来说很有意义,我想我可以通过包含**来尝试这个type** 字段,而不是在 where 子句中使用 averageSals。谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多