首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用来自另一个表的值更新表

问使用来自另一个表的值更新表
EN

Database Administration用户
提问于 2018-03-22 17:12:16
回答 1查看 6.7K关注 0票数 -1

我有两张有结构的桌子

代码语言:javascript
复制
Table1
------   
No | Name | IDNo | HouseNoBlock

Table2
------ 
IDNo | HouseNo | Block

我试图用HouseNoBlock连接的值更新第一个表的HouseNo/Block列,同时比较IDNo。我能够使用查询获得值。

代码语言:javascript
复制
SELECT CONCAT(table2.HouseNo,'/',table2.Block) 
FROM   table2 ,table1 
WHERE  table1.IDNo = table2.IDNo

但是当我尝试UPDATE table1时,我得到了Syntax error ERROR 1064 (42000)。

代码语言:javascript
复制
UPDATE table1 
SET    HouseNoBlock = CONCAT (table2.HouseNo,'/',table2.Block) 
FROM   table2 ,table1 
WHERE  table1.IDNo = table2.IDNo

有人能帮忙吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-03-22 17:53:16

由于您没有提供任何数据,我准备了下一个示例:

代码语言:javascript
复制
create table tbl1 (No int, Name varchar(200), IDNo int, HouseNoBlock varchar(200));

create table tbl2 (IDNo int, HouseNo varchar(100), Block varchar(100));

insert into tbl1 values 
(1, 'Name1', 1, null), 
(2, 'Name2', 2, null), 
(3, 'Name3', 1, null);

insert into tbl2 values 
(1, 'House1', 'Block1'), 
(2, 'House2', 'Block2');

使用下一句:

代码语言:javascript
复制
UPDATE tbl1  --< first the table that will be updated
JOIN   tbl2
ON     tbl1.IDNo = tbl2.IDNo
SET    HouseNoBlock = CONCAT(tbl2.HouseNo,'/',tbl2.Block);

这是最后的结果:

代码语言:javascript
复制
No | Name  | IDNo | HouseNoBlock 
-: | :---- | ---: | :------------
 1 | Name1 |    1 | House1/Block1
 2 | Name2 |    2 | House2/Block2
 3 | Name3 |    1 | House1/Block1

dbfiddle 这里

查看有关更新语法的MySQL文档:

代码语言:javascript
复制
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

对于多表语法,更新在table_references中命名的每个表中满足条件的行。每个匹配行都会被更新一次,即使它多次匹配条件。对于多表语法,不能使用ORDER和LIMIT .

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/202032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档