【问题标题】:SQL UPDATE based on SELECT from another tableSQL UPDATE 基于另一个表中的 SELECT
【发布时间】:2017-07-20 17:35:07
【问题描述】:

我有两个表:samples_specific_storage sss 和 samples s,它们都有 4 列 area_easting、area_northing、context_number、sample_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、样本编号的记录。我试图理解嵌套查询,因为我认为这是我需要的: 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
...

样本 area_easting,area_northing,context_number,sample_numbers,shelf_number
99,45,1,1,货架1
99,44,2,1,shelf1
99,44,2,2,shelf1
99,44,5,1,shelf1
...

所以我想将架子 1 更新到架子 2,其中 box_number=F52 [我知道表的结构很糟糕 - 我继承了它,它将被修复]

【问题讨论】:

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

标签: sql postgresql


【解决方案1】:

我希望我没听错你的问题,但是……像这样应该让你开始:

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-语法,它不是标准 SQL,但在这种情况下非常方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多