使用子查询插入SQL

时间:2013-11-26 00:44:02

标签: sql database

有人能给我正确的语法,告诉我如何使用子查询插入和更新数据吗?

SELECT PersonID 
FROM Authors
WHERE PersonID IN (select personID
               from person
               where last_name = 'Smith' AND first_name = 'Barry'
);

并更新符合此示例人员标准的某些列。

3 个答案:

答案 0 :(得分:1)

Update Authors
   set Field1='x', Field2='Y', Field3='Z'
FROM Authors
WHERE PersonID IN (select personID
               from person
               where last_name = 'Smith' AND first_name = 'Barry'
);

答案 1 :(得分:1)

关于插入,我不是100%清楚你要插入什么表。如果你想把25和Y放在作者表上的费用和已发布的列中,那么它就是一个更新,而不是插入,就像madtrubocow所做的那样,尽管我会这样做:

UPDATE a
   SET Fee=25,Published='Y'
FROM 
    Authors a
WHERE EXISTS
    (SELECT 1 FROM Person p WHERE a.PersonID=p.PersonID 
    AND p.last_name = 'Smith'  AND p.first_name = 'Barry')

如果要将一行插入到具有AuthorID,Fee和Published列的其他表中,它将是这样的:

   INSERT INTO NewTable(AuthorID,Fee,Published)
    SELECT AuthorID,25,'Y'
    FROM Authors a
    WHERE EXISTS
        (SELECT 1 FROM Person p WHERE a.PersonID=p.PersonID 
        AND p.last_name = 'Smith'  AND p.first_name = 'Barry')

我应该注意,如果PersonID是Authors表中的唯一列,并且First和Last Name的组合在Person表上是唯一的,我只会以这种方式编写这些查询。如果数据库没有强制执行其中任何一项,那么您需要考虑如何确保不插入或更新比预期更多的行。

答案 2 :(得分:0)

insert into authors(personID, field1, field2)
select personID, 'data1', 'data2' 
from person 
where last_name = 'Smith' AND first_name = 'Barry'