【发布时间】:2021-04-14 12:33:53
【问题描述】:
我坚持使用 SQL 查询来更新同一个表中的不同行。但是 1 行必须从具有相同参考 ID (bst__ref) 的另一行获取数据。
当前表bstlyn__
| A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|
| 157035 | 1/01/1980 | 2/04/2021 | 117210 | N | 0 | N |
| 157035 | 1/01/1980 | 25/03/2021 | 128078 | N | 0 | N |
| 157035 | 1/01/1980 | 25/03/2021 | 128078 | N | 0 | N |
| 157036 | 1/01/1980 | 12/04/2021 | 117022 | N | 0 | N |
| 157036 | 1/01/1980 | 12/04/2021 | 117034 | N | 0 | N |
| 157036 | 1/01/1980 | 9/04/2021 | 128078 | N | 0 | N |
当前 SQL 查询
UPDATE bstlyn__ SET G = 'Y', F = 'N', B = C WHERE E = 'N' AND F = '0'
这会导致将所有vrz__dat 行更改为与vrzv_dat 中相同的值。但正如您在同一个bst__ref 中看到的,所有afg__ref 的值为128078 的vrzv_dat 具有不同的vrzv_dat。这应该与bst__ref 中没有afg__ref 128078 的(第一)行相同的日期/vrz__dat。
所以,运行上面的查询后,我得到:
| bst__ref (A) | vrz__dat (B) | vrzv_dat (C) | afg__ref (D) | fiat____ (E) | fac__tst (F) | vrz__tst (G) |
|---|---|---|---|---|---|---|
| 157035 | 2/04/2021 | 2/04/2021 | 117210 | N | N | Y |
| 157035 | 25/03/2021 | 25/03/2021 | 128078 | N | N | Y |
| 157035 | 25/03/2021 | 25/03/2021 | 128078 | N | N | Y |
| 157036 | 12/04/2021 | 12/04/2021 | 117022 | N | N | Y |
| 157036 | 12/04/2021 | 12/04/2021 | 117034 | N | N | Y |
| 157036 | 9/04/2021 | 9/04/2021 | 128078 | N | N | Y |
但应该是:
| bst__ref | vrz__dat | vrzv_dat | afg__ref | fiat____ | fac__tst | vrz__tst |
|---|---|---|---|---|---|---|
| 157035 | 2/04/2021 | 2/04/2021 | 117210 | N | N | Y |
| 157035 | 2/04/2021 | 25/03/2021 | 128078 | N | N | Y |
| 157035 | 2/04/2021 | 25/03/2021 | 128078 | N | N | Y |
| 157036 | 12/04/2021 | 12/04/2021 | 117022 | N | N | Y |
| 157036 | 12/04/2021 | 12/04/2021 | 117034 | N | N | Y |
| 157036 | 12/04/2021 | 9/04/2021 | 128078 | N | N | Y |
我到底如何只使用 SQL 来做到这一点? 谢谢!
【问题讨论】:
-
您使用的是哪个 dbms?
-
FireDAC / Phys / ODBC / Microsoft / SQL Server Native Client 11.0
-
什么定义了“第一行” 你如何订购它们?
-
@Charlieface no Idea tbh,但通常第一行永远不会出现在
afg__ref128078 -
如果您无法定义我们如何获得第一行,我们该如何解决?请记住,表没有固有的顺序,每次返回的结果都可能不同,而没有明确的顺序
标签: sql sql-server sql-update