SQL查询根据用户定义的条件更新行

时间:2015-07-09 17:00:57

标签: sql sql-update upsert

我有一个表和条件来匹配两列的子字符串/整数值。

示例表如下所示

表1:

id           id1    id2              id3        id4
18499       18499   8001480043398   datarow1a   datarow1a
18497       18497   8000900121777   datarow1a   datarow1a
18495       18495   8024180001901   datarow1b   datarow1b
18493       18493   8001480070530   datarow1c   something1c
18573       18573   8001480007703   datarow1b   datarow1b

用户条件的示例查询:

select * 
from table1 
where id3 = id4.

结果:

id           id1    id2              id3        id4
18499       18499   8001480043398   datarow1a   datarow1a
18497       18497   8000900121777   datarow1a   datarow1a
18495       18495   8024180001901   datarow1b   datarow1b
18573       18573   8001480007703   datarow1b   datarow1b

但我想要的是根据用户要求将id1更新为最小或最大ID。因此,如果用户选择min,则第1行和第2行的id1应如下所示

 id          id1    id2              id3        id4
18499       18497   8001480043398   datarow1a   datarow1a
18497       18497   8000900121777   datarow1a   datarow1a

并且对于第3行和第4行,它应该是

18493       18493   8001480070530   datarow1c   datarow1c
18573       18493   8001480007703   datarow1b   datarow1b

任何人都可以分享我应该如何处理这个问题吗?

PS:我不知道如何使用查询,因此无法提供任何样本。我使用的数据库没有完整的外连接(如果此信息有用的话)

1 个答案:

答案 0 :(得分:0)

对于Max:

UPDATE table_1 
SET    id1 = (SELECT Max(id1) 
          FROM   table_1 t2 
          WHERE  table_1.id3 = t2.id3) 
WHERE  id3 = id4 

对于Min:

UPDATE table_1 
SET    id1 = (SELECT Min(id1) 
          FROM   table_1 t2 
          WHERE  table_1.id3 = t2.id3) 
WHERE  id3 = id4