如何使用子查询执行更新语句?

时间:2014-07-17 04:58:12

标签: sql sqlite sql-update subquery

我正在尝试使用另一个表中存在的信息更新表。我要更新的表称为YVDtemp,我从中获取信息的第二个表称为yvs_textsMain。我还使用第3个表来匹配我没有的任何记录,这个表叫做YVD。这是我的更新声明。

 update Yvdtemp
 set
 NAME  = yvd_textsmain.[name] 
 SPIC = yvd_textsmain.[rname]
 EFFECT = yvd_textsmain.[desc] 
 where exists (
 select yvd_textsMain.[name], yvd_textsMain.[rname], yvd_textsMain.[desc] 
 from YVD_textsMain
 left outer join YVD 
 on (YVD_textsMain.[rname] = yvd.[spic])
 where yvd.[spic] is null);

这句话似乎无效。它给了我一个错误"附近的spic':语法错误 但是,当我使用select语句时,除了update语句之外,select语句有效,我得到了YVD表中没有的所有信息,以及我想把它传递给YVDTemp表的信息。

我正在使用SQLite。

2 个答案:

答案 0 :(得分:0)

你错过了逗号

NAME  = yvd_textsmain.[name],
SPIC = yvd_textsmain.[rname],
EFFECT = yvd_textsmain.[desc] 

答案 1 :(得分:0)

由于Yvdtempyvd_textsmain之间没有匹配条件,您将如何映射更新语句中的行。 根据要求,您看起来正在寻找一个Insert命令,可以写成:

INSERT INTO Yvdtemp (NAME, SPIC, EFFECT) 
 Select yvd_textsMain.[name], yvd_textsMain.[rname], yvd_textsMain.[desc] 
 from YVD_textsMain
 left outer join YVD 
 on (YVD_textsMain.[rname] = yvd.[spic])
 where yvd.[spic] is null