当前位置: 首页 > 面试题库 >

更新引用另一个表

蓟安歌
2023-03-14
问题内容

我有一条语句需要写(用通用名称表示,因为这是为了工作)来更新表“ tUpd”中的列“ updCol”。tUpd还具有一个列“
linkCol”,该列存在于另一个表tOther中。tOther还有另一列“ idCol”。

我的问题是更新tUpd中行的updCol值,该值通过linkCol对应于具有给定idCol值的行。

我认为应该起作用的一种解决方案是:

update
    tUpd
set
    updCol = XXX
where exists (
    select
        idCol
    from
        tOther
    where
        tOther.linkCol = tUpd.linkCol
    and tOther.idCol = MY_ID
)

但是,我担心这种方法会导致性能下降,因为以前我曾被警告过与性能相关的子查询-该子查询将对tUpd的每一行运行一次,这是正确的吗?

有没有人有更好的建议?

重要更新 :我的工作场所避免不惜一切代价使用SQL JOIN,而是更喜欢使用where来加入where子句where a.col = b.col。可以说这很尴尬,但是允许灵活地进行日志记录,而我对此并不完全了解。所以,我正在寻找非JOIN使用的解决方案:)


问题答案:

就像这样

UPDATE DestinationTable
SET DestinationTable.UpdateColumn =  SourceTable.UpdateColumn 
FROM SourceTable
WHERE DestinationTable.JoinColumn = SourceTable.JoinColumn


 类似资料:
  • 问题内容: 我正在尝试根据另一个MySQL信息更新一个MySQL表。 我的桌子看起来像: 而表如下所示: 我想更新在与来自基于(存储在字符串字段)。 希望更新后的表如下所示: 我有一个有效的查询,但是非常慢: 这使我的CPU耗尽,最终导致超时,并且仅执行了一部分更新(有数千个要匹配的值)。我知道匹配的速度会很慢,但这是我必须将它们匹配在一起的唯一数据。 有没有更好的方法来更新这样的值?如果可以更快

  • 我必须在我的android活动中实现2个回收器视图,其中第一个回收器视图显示类别,第二个将显示来自所选类别的项目。我已经实现了第一个回收器视图。 现在,在RecycerView中单击一个项目时,我需要突出显示该视图,还需要显示该类别下的项目。当我单击另一个视图时,第一个视图高亮应该更改为单击并显示该类别中的项目的新视图。另外,当我谈到这个活动时,第一个项目应该在第一个回收器视图中默认突出显示,相应

  • 问题内容: 我是java的新手,我被困在这里…我要做的是将一个java文件中arraylist的更改更新为另一个文件中的JPanel。我正在对arraylist进行排序,因此无法手动完成。有什么办法可以让我“告诉” JPanel痛楚吗? 我有进行排序(工作)的BubbleSort.java,有包含JPanel和JFrame类(用于显示未排序的直方图的工作)的Animation.java。 这是家庭

  • 我已经创建了一个多边形表(多边形),其中包含名称和点(使用多边形值) 我有另一个表(latlon ),它有lat和lot列,包含超过一百万条记录 我必须在“多边形”表中的点的帮助下更新纬度表中的列(区域名称) 以下 select 语句为一条记录提供正确的输出。 有人能帮我在POSTGIS中编写一个UPDATE查询来获取更多的lat,lon值吗?

  • 问题内容: 我试图用另一个表中找到的值更新一个表中的所有记录。 我尝试了相同基本查询的许多版本,并且始终收到相同的错误消息: 操作必须使用可更新的查询。 关于为什么此查询在Access DB中不起作用的任何想法? 也尝试了此操作,因为我意识到第二张表的每个型号都有多个型号记录-我只需要为每个型号找到第一条记录中的第一条说明。 …虽然仍然出现相同的错误。 问题答案: 您必须使用联接

  • 问题内容: 我有一个Maximo数据库,该数据库具有无法更改的表结构。我希望在创建或更新主电子邮件地址时将其复制到PERSON表中。以下结构描述了PERSON表和EMAIL表 PERSON表: EMAIL表: 如您所见,这两个表在PERSONID列上链接。这是我希望触发器执行的操作: 如果EMAIL表已更新或插入了新行,那么如果ISPRIMARY字段,我想将EMAILADDRESS字段复制到PER