我有两个表:samples_specific_storage sss 和 samples s,它们的主键都是 4 列 area_easting、area_northing、context_number、sample_number
表格存储有框号,例如box F52,我先全选boxes = 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、样本编号的记录。我试图理解嵌套查询,因为我认为这是我需要的:UPDATE SET FROM WHERE (SELECT...) 我知道以下内容是错误的,但大致如下:
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
area_easting,area_northing,context_number,sample_numbers,box_number
99,45,1,1,F52
99,44,2,1,F52
99,44,2,2,F52
99,44,5,1,F52
...
sample
area_easting,area_northing,context_number,sample_numbers,shelf_number
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 的 UPDATE
...FROM
-Syntax,它不是标准 SQL,但在这种情况下非常方便。
关于基于来自另一个表的 SELECT 的 SQL UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45209854/