基于从另一个表中选择的SQL更新

基于从另一个表中选择的SQL更新,sql,postgresql,Sql,Postgresql,我有两个表:samples\u specific\u storage sss和samples s s,它们的主键都是4列area\u easting、area\u northing、context\u number、sample\u number 表存储有框编号,例如框F52,我首先选择所有框=F52 SELECT sss.area_easting, sss.area_northing, sss.context_number, sss.sample_number FROM samples.sa

我有两个表:samples\u specific\u storage sss和samples s s,它们的主键都是4列area\u easting、area\u northing、context\u number、sample\u number

表存储有框编号,例如框F52,我首先选择所有框=F52

SELECT sss.area_easting, sss.area_northing, sss.context_number, 
sss.sample_number
FROM samples.samples_specific_storage sss  
WHERE sss.container_name = 'F19' 
我想使用此选择更新样本表中的记录,这些记录具有相应的area_easting、area_northing、context_number、sample number。我试图理解嵌套查询,因为我认为这就是我需要的:从何处更新集(选择…) 我知道以下是错误的,但大致是这样的:

UPDATE samples.samples_specific_storage
SET current_location = 'testing'
WHERE (
SELECT s.area_easting,s.area_northing,s.context_number,s.sample_number FROM samples.samples s WHERE current_location = 'F19')
虚拟数据:

sss

区域东距、区域北距、上下文编号、样本编号、方框编号
99,45,1,1,F52
99,44,2,1,F52
99,44,2,2,F52
99,44,5,1,F52
...

样本 区域东距、区域北距、上下文编号、样本编号、货架编号
99,45,1,1,shelf1
99,44,2,1,shelf1
99,44,2,2,shelf1
99,44,5,1,shelf1
...


因此,我想将shelf1更新为shelf2,其中box_number=F52[我知道表的结构很糟糕-我继承了它,它将被修复]

我希望我正确地回答了你的问题,但类似这样的内容应该会让你开始:

UPDATE samples t1
SET shelf_number='shelf2'
FROM (SELECT sss.area_easting, sss.area_northing, sss.context_number, sss.sample_number
      FROM samples.samples_specific_storage sss  
      WHERE sss.container_name = 'F19') t2
WHERE t1.area_easting   = t2.area_easting   
  AND t1.area_northing  = t2.area_northing 
  AND t1.context_number = t2.context_number
  AND t1.sample number  = t2.sample number 

我使用Postges的
更新
..
FROM
-语法,这不是标准的SQL,但在这种情况下非常方便。

添加一些示例表数据和预期结果-作为格式化文本。另外,请告诉我们您使用的是哪种dbms。dbms很重要更新的bcz语法可能不同。请添加模式语句fpr以创建这两个表。这使得评估变得容易