2013-11-26 29 views
0

有人可以给我正确的语法,我怎样才能插入和更新数据使用子查询?插入SQL与子查询

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

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

+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' 
); 
+0

谢谢,提供了一个如何使用插入操作的例子吗?例如,将值25和Y插入到Fee列中并使用我提供的子查询发布(查找某个人的作者ID)? – krosiris

+0

这是你的意思吗? 插入作者(费用,已发布)从作者中选择25,'Y'Where PersonID IN(从人0​​中选择personID ,其中last_name ='Smith'AND first_name ='Barry' ); – madturbocow

0
insert into authors(personID, field1, field2) 
select personID, 'data1', 'data2' 
from person 
where last_name = 'Smith' AND first_name = 'Barry' 
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,手续费及发布的列不同的表,这将是这样的:

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表上是唯一的。如果其中任何一个不是由数据库强制执行的,则需要考虑如何确保不会插入或更新比您想要的更多的行。