更新匹配条件的第一行

Posted

技术标签:

【中文标题】更新匹配条件的第一行【英文标题】:Update first rows that match condition 【发布时间】:2013-03-10 23:08:23 【问题描述】:
Update table1
set column1 = 'abc', column2 = 25
where column3 IN ('John','Kate','Tim')

Column3 包含 John 两次(两个关联的行/记录),类似地 - 它包含 Kate 第三次和 Tim 两次。 如何调整查询,以便更新只影响 John 的第一行、Kate 的第一行和 Tim 的第一行?

供参考,这里是table1:

column1 column2 column3
aa       2       John (!)
affd     24      John 
dfd      5       Tim (!)
ss       77      Kate (!)
s        4       Tim
s        1       Kate
sds      34      Kate

我只想更新标有 (!) 的行

我对Ms Access特别感兴趣! - 但也很好奇这是如何在 Sql Server 中完成的,以防万一。谢谢!

【问题讨论】:

在 SQL Server 2005+ 中,可能会使用 CTE 和 ROW_NUMBER 调用,尽管您仍然需要知道是什么决定了行的“第一性”。我不知道如何在 MS Access 中解决这个问题。 【参考方案1】:

Sql Server 解决方案 - 请注意,您必须有一个唯一的标识列才能工作(或一些唯一的列)。

UPDATE table1 
SET    column1 = 'abc', 
       column2 = 25 
WHERE  id IN (SELECT id 
              FROM   (SELECT id, 
                             Row_number() 
                               OVER ( 
                                 ORDER BY rowyouwanttoorderby ) AS ROWNUM 
                      FROM   table1 
                      WHERE  column3 IN ( 'John', 'Kate', 'Tim' )) AS temp 
              WHERE  rownum = 1) 

【讨论】:

以上是关于更新匹配条件的第一行的主要内容,如果未能解决你的问题,请参考以下文章

在 PySpark 中的窗口上获取与某些条件匹配的第一行

Javascript / React - 获取匹配特定条件的数组中的第一项

shell-sed中的编辑命令详解(中)

PHP PDOStatement:获取一行,作为数组的键的第一列[重复]

匹配函数vlookup和lookup

替换文件中的第 N 个字符串匹配项