【问题标题】:SQL Server UPDATING one table from values from another table [duplicate]SQL Server从另一个表中的值更新一个表[重复]
【发布时间】:2021-11-12 05:37:40
【问题描述】:

我正在尝试在 SQL Server 中将值从一个表更新到另一个表。我有 2 个表:tblBus 和 tblRB_ID。

create table tblBus
(
    bus varchar (10) NOT NULL PRIMARY KEY,
    rb_id int FOREIGN KEY REFERENCES tblRB_ID(rb_id2),
    roadside_bottom varchar (20)
);
Bus rb_id roadside_bottom
1000 NULL NULL
1001 NULL NULL

这里是 tblRB_ID:


create table tblRB_ID
(
    rb_id2 int NOT NULL IDENTITY (1,1) PRIMARY KEY,
    contract_id int FOREIGN KEY REFERENCES tblContracts(contract_id),
    rb_name varchar (20)
    CONSTRAINT rb_pass CHECK
    (
        rb_name IN ('King', 'Super King', 'Kong', 'Half Side')
    )
);
rb_id2 contract_id roadside_bottom
8 1 King
9 2 Super King

我尝试使用它来更新值,但我收到一条错误消息,提示“关键字 'RIGHT' 附近的语法不正确”。

UPDATE tblBus
RIGHT JOIN tblRB_ID
ON tblBus.rb_id = tblRB_ID.rb_id2,
   tblBus.roadside_bottom = tblRB_ID.rb_name;
SET tblBus.rb_id = tblRB_ID.rb_id2,
   tblBus.roadside_bottom = tblRB_ID.rb_name;

我想用来自 tblRB_ID 的信息更新 tblBus。我希望 tblRB_ID 中的两条记录都进入 tblBus,以及我放入 tblRB_ID 的任何后续记录。我希望它看起来像这样:

Bus rb_id roadside_bottom
1000 8 King
1001 9 Super King

请帮忙。

谢谢

【问题讨论】:

  • 查看文档中的syntaxExamples(例如this one),您会发现您的UPDATE 格式非常错误。 JOINs SET 之前,你完全错过了FROM

标签: sql sql-server


【解决方案1】:

您使用的语法不同。更新语法如下所示

UPDATE <Table Alias>
SET
    <Column to be updated> = <Column from which you need to update>
    FROM TableA a
        INNER JOIN TableB B
            ON A.<Column Name> = B.<ColumnName>

所以你的查询实际上应该是这样的

UPDATE tblBus
SET tblBus.rb_id = tblRB_ID.rb_id2,
   tblBus.roadside_bottom = tblRB_ID.rb_name
  FROM tblBus
        JOIN tblRB_ID -- Inner join is recommended so that the non-matching rows are not updated with NULL
            ON tblBus.rb_id = tblRB_ID.rb_id2
                AND tblBus.roadside_bottom = tblRB_ID.rb_name;

【讨论】:

  • 这是否也会更新我拥有的两个值以及我放入 tblRB_ID 的任何后续记录?我尝试使用它,但最终得到“关键字'AND'附近的语法不正确”。
  • @LongLouis 在 AND 之前有一个逗号,现在删除了
  • 谢谢,但它似乎没有改变 tblBus 上的值。我确实输入了 INNER join 并删除了逗号。
  • 只要确保连接列确实有匹配的值。
  • 哦,谢谢你的信息。如果我想从 tblRB_ID 中的值更新 tblBus 上的空值呢?如果不是内连接,右连接?
猜你喜欢
  • 2017-06-01
  • 2014-03-13
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多