如何使用select语句的多个列中的值来更新SQL

时间:2018-04-01 02:10:01

标签: sql sql-server azure-sql-database

我的SQL数据库中有两个表:

表A

------------------------------------------------------
| score1 | score2 | score3 | timestamp  | identifier |
------------------------------------------------------
| NULL   | NULL   | NULL   | 2018-01-01 | ABCDEF     |
------------------------------------------------------

表B

------------------------------------------------------
| scoreA | scoreB | scoreC | timestamp  | identifier |
------------------------------------------------------
| 1234   | 5678   | 8901   | 2018-02-02 | ABCDEF     |
------------------------------------------------------

我正在尝试向UPDATE写一个SELECT查询,并将scoreA, scoreB, scoreC TableB 映射到score1, score2, score3列TableA 表示与identifier值匹配的记录。

我可以想办法在代码中执行此操作,但不能在sql中执行此操作。我试图获得一张桌子(在执行UPDATE之后),看起来像:

更新查询后

预期 TableA

------------------------------------------------------
| score1 | score2 | score3 | timestamp  | identifier |
------------------------------------------------------
| 1234   | 5678   | 8901   | 2018-01-01 | ABCDEF     |
------------------------------------------------------

我认为我可以在我的SELECT这样的(伪)中做简单的UPDATE

UPDATE TableA SET (
    score1 = (SELECT scoreA FROM TableB WHERE identifier = 'ABCDEF'), 
    score2 = (SELECT scoreB FROM TableB WHERE identifier = 'ABCDEF'), 
    score3 = (SELECT scoreC FROM TableB WHERE identifier = 'ABCDEF'), 
) identifier = 'ABCDEF'

但对我来说,这看起来很愚蠢,因为内部SELECTS基本上是完全多余的。 UPDATE一个表格是否有更有效的方式来自另一个表格的SELECT个结果?

这可能是一个简单的问题,但此刻,它已经超出了我的想法。

如果我在代码中这样做,我正在使用C#,但是,我试图在SQL中完全这样做。 MS Azure SQL,如果重要。

2 个答案:

答案 0 :(得分:1)

是的,您可以通过加入执行更新。注意别名A。

getResourceAsStream

答案 1 :(得分:0)

您需要使用// Require dependencies var express = require('express'); var app = express(); // Set server port app.set('port', (process.env.PORT || 3000)); // Set static page directory, /public app.use(express.static(__dirname + '/public')); app.use('/public', express.static('public')); // Set template file directory, /views. Set view engine to EJS app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); // Route root request to pages/index app.get('/', function(request, response) { response.render('pages/index'); }); // Route favicon request to public/favicons app.get('/favicon.ico', function(request, response) { response.render('./public/favicons'); }); // Begin listening at specified port app.listen(app.get('port'), function() { console.log('Node app is running on port', app.get('port')); });

table1进行联接
table2

如果,我会按照您的方式行事,那么相关方法但不会更有效

update t1 
      set t1.score1 = t2.scoreA,
          t1.score2 = t2.scoreB,
          t1.score3 = t2.scoreC
from table1 t1
inner join table2 t2 on t2.identifier = t1.identifier